{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From D:\\anaconda3\\lib\\site-packages\\tensorflow\\python\\compat\\v2_compat.py:96: disable_resource_variables (from tensorflow.python.ops.variable_scope) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "non-resource variables are not supported in the long term\n"
     ]
    }
   ],
   "source": [
    "import tensorflow.compat.v1 as tf\n",
    "tf.disable_v2_behavior()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "import math\n",
    "import time\n",
    "import random\n",
    "import numpy as np\n",
    "from collections import deque\n",
    "from queue import deque\n",
    "from ChessBoard import ChessBoard"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 定义超参数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "EMPTY = 2\n",
    "# 超参数\n",
    "GAMMA = 0.9         # Q衰减系数\n",
    "INITIAL_E = 0.1     # 初始ε\n",
    "FINAL_E = 0.001\t\t# 初始ε\n",
    "REPLAY_SIZE = 10000  # 经验回放大小\n",
    "BATCH_SIZE = 200  \t# 批大小\n",
    "TAGET_Q_STEP = 100  # 目标网络同步训练次数"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 定义DQN类"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "class DQN():\n",
    "    def __init__(self):\n",
    "        # 棋盘大小\n",
    "        self.SIZE = ChessBoard.SIZE\n",
    "        self.state_dim = self.SIZE * self.SIZE + 1\n",
    "        self.action_dim = self.SIZE * self.SIZE\n",
    "        # 其它参数\n",
    "        self.replay_buffer = deque()\n",
    "        self.time_step = 0\n",
    "        self.epsilon = INITIAL_E\n",
    "\n",
    "        self.hide_layer_inputs = 52\n",
    "\n",
    "        # 创建网络\n",
    "        self.create_Q()\n",
    "        self.create_targetQ()\n",
    "        self.targetQ_step = TAGET_Q_STEP\n",
    "        # 定义优化器\n",
    "        self.train_method()\n",
    "        # 定义执行器\n",
    "        gpu_options = tf.GPUOptions(allow_growth=True)\n",
    "        gpu_options = tf.GPUOptions(\n",
    "            per_process_gpu_memory_fraction=0.8, allow_growth=True)  # 每个gpu占用0.8的显存\n",
    "        config = tf.ConfigProto(\n",
    "            gpu_options=gpu_options, allow_soft_placement=True, log_device_placement=False)\n",
    "        # 如果电脑有多个GPU，tensorflow默认全部使用。如果想只使用部分GPU，可以设置CUDA_VISIBLE_DEVICES。\n",
    "        self.sess = tf.Session(config=config)\n",
    "\n",
    "        # 网络初始化\n",
    "        self.init = tf.global_variables_initializer()\n",
    "        self.sess.run(self.init)\n",
    "\n",
    "    def create_Q(self):\n",
    "        # 网络权值\n",
    "        W1 = self.weight_variable([self.state_dim, self.hide_layer_inputs])\n",
    "        b1 = self.bias_variable([self.hide_layer_inputs])\n",
    "        W2 = self.weight_variable([self.hide_layer_inputs, self.action_dim])\n",
    "        b2 = self.bias_variable([self.action_dim])\n",
    "        # 输入层\n",
    "        self.state_input = tf.placeholder(\"float\", [None, self.state_dim])\n",
    "        # 隐藏层\n",
    "        h_layer = tf.nn.relu(tf.matmul(self.state_input, W1) + b1)\n",
    "        # 输出层\n",
    "        self.Q_value = tf.matmul(h_layer, W2) + b2\n",
    "        # 保存权重\n",
    "        self.Q_weihgts = [W1, b1, W2, b2]\n",
    "\n",
    "    def create_targetQ(self):\n",
    "        # network weights\n",
    "        W1 = self.weight_variable([self.state_dim, self.hide_layer_inputs])\n",
    "        b1 = self.bias_variable([self.hide_layer_inputs])\n",
    "        W2 = self.weight_variable([self.hide_layer_inputs, self.action_dim])\n",
    "        b2 = self.bias_variable([self.action_dim])\n",
    "        # input layer\n",
    "        # self.state_input = tf.placeholder(\"float\",[None,self.state_dim])\n",
    "        # hidden layers\n",
    "        h_layer = tf.nn.relu(tf.matmul(self.state_input, W1) + b1)\n",
    "        # Q Value layer\n",
    "        self.targetQ_value = tf.matmul(h_layer, W2) + b2\n",
    "        self.targetQ_weights = [W1, b1, W2, b2]\n",
    "\n",
    "    def copy(self):\n",
    "        \"\"\"拷贝网络\"\"\"\n",
    "        for i in range(len(self.Q_weihgts)):\n",
    "            self.sess.run(\n",
    "                tf.assign(self.targetQ_weights[i], self.Q_weihgts[i]))\n",
    "\n",
    "    def train_method(self):\n",
    "        self.action_input = tf.placeholder(\"float\", [None, self.action_dim])\n",
    "        self.y_input = tf.placeholder(\"float\", [None])\n",
    "\n",
    "        Q_action = tf.reduce_sum(tf.multiply(\n",
    "            self.Q_value, self.action_input), reduction_indices=1)  # mul->matmul\n",
    "        self.cost = tf.reduce_mean(tf.square(self.y_input - Q_action))\n",
    "        self.train = tf.train.AdamOptimizer(1e-3).minimize(self.cost)\n",
    "\n",
    "    def perceive(self, state, action, reward, next_state, done):\n",
    "        \"\"\"添加经验池\"\"\"\n",
    "        one_hot_action = np.zeros(self.action_dim)\n",
    "        one_hot_action[action] = 1\n",
    "        self.replay_buffer.append(\n",
    "            [state, one_hot_action, reward, next_state, done])\n",
    "        # 经验池满了\n",
    "        if len(self.replay_buffer) > REPLAY_SIZE:\n",
    "            self.replay_buffer.popleft()\n",
    "        # 一个batch够了\n",
    "        if len(self.replay_buffer) > BATCH_SIZE:\n",
    "            self.train_Q_network()\n",
    "\n",
    "    def modify_last_reward(self, new_reward):\n",
    "        v = self.replay_buffer.pop()\n",
    "        v[2] = new_reward\n",
    "        self.replay_buffer.append(v)\n",
    "\n",
    "    def train_Q_network(self):\n",
    "        self.time_step += 1\n",
    "        # 构建一个小的训练batch\n",
    "        minibatch = random.sample(self.replay_buffer, BATCH_SIZE)\n",
    "        state_batch = [data[0] for data in minibatch]\n",
    "        action_batch = [data[1] for data in minibatch]\n",
    "        reward_batch = [data[2] for data in minibatch]\n",
    "        next_state_batch = [data[3] for data in minibatch]\n",
    "        # 构建训练数据\n",
    "        y_batch = []\n",
    "\n",
    "        \"\"\"\n",
    "            这里是计算新局面的估值                                                                                                                    Q'\n",
    "            使用：targetQ 或 Q  网络来计算\n",
    "\n",
    "            全局就在此处可能使用targetQ，作为对新状态的估值\n",
    "\n",
    "            在csdn的代码中，使用targetQ的代码被注释掉了\n",
    "        \"\"\"\n",
    "        # 计算Q'的所有值\n",
    "        # Q_value_batch = self.sess.run(self.Q_value, feed_dict={\n",
    "        #                               self.state_input: next_state_batch})\n",
    "        Q_value_batch = self.sess.run(self.targetQ_value, feed_dict={\n",
    "                                      self.state_input: next_state_batch})\n",
    "\n",
    "        # Q的值 Q = γ * max(Q')\n",
    "        for i in range(0, BATCH_SIZE):\n",
    "            done = minibatch[i][4]  # 是否结束\n",
    "            if done:\n",
    "                y_batch.append(reward_batch[i])\n",
    "            else:\n",
    "                y_batch.append(reward_batch[i] +\n",
    "                               GAMMA * np.max(Q_value_batch[i]))\n",
    "        self.sess.run(self.train, feed_dict={\n",
    "                      self.y_input: y_batch, self.action_input: action_batch, self.state_input: state_batch})\n",
    "\n",
    "        # 每一定轮次 拷贝Q网络到targetQ网络\n",
    "        if self.time_step % self.targetQ_step == 0:\n",
    "            self.epsilon *= 0.99  # 每次更新targetQ，减小随机选择落子点的概率\n",
    "            self.copy()\n",
    "\n",
    "    def egreedy_action(self, state):\n",
    "        \"\"\"含有随机 计算一步\"\"\"\n",
    "        # 计算当前局面的所有Q值\n",
    "        Q_value = self.sess.run(self.Q_value, feed_dict={\n",
    "                                self.state_input: [state]})[0]\n",
    "\n",
    "        min_v = Q_value[np.argmin(Q_value)] - 1  # 最小的Q_value -1\n",
    "        valid_action = []\n",
    "\n",
    "        for i in range(len(Q_value)):  # 遍历每一个落子点\n",
    "            if state[i] == EMPTY:  # 空，可以落子\n",
    "                valid_action.append(i)\n",
    "            else:  # 有棋子，不可以落子\n",
    "                Q_value[i] = min_v\n",
    "\n",
    "        # 以 epsilon的概率随机落子\n",
    "        if random.random() <= self.epsilon:\n",
    "            l = len(valid_action)\n",
    "            if l == 0:\n",
    "                return -1\n",
    "            else:\n",
    "                return valid_action[random.randint(0, len(valid_action) - 1)]\n",
    "        else:  # 其它清空，选取Q最大的点落子\n",
    "            return np.argmax(Q_value)\n",
    "\n",
    "    def action(self, state):\n",
    "       # 计算当前局面的所有Q值\n",
    "        Q_value = self.sess.run(self.Q_value, feed_dict={\n",
    "                                self.state_input: [state]})[0]\n",
    "\n",
    "        min_v = Q_value[np.argmin(Q_value)] - 1  # 最小的Q_value -1\n",
    "        valid_action = []\n",
    "\n",
    "        for i in range(len(Q_value)):  # 遍历每一个落子点\n",
    "            if state[i] == EMPTY:  # 空，可以落子\n",
    "                valid_action.append(i)\n",
    "            else:  # 有棋子，不可以落子\n",
    "                Q_value[i] = min_v\n",
    "        return np.argmax(Q_value)\n",
    "\n",
    "    def weight_variable(self, shape):\n",
    "        initial = tf.truncated_normal(shape)\n",
    "        return tf.Variable(initial)\n",
    "\n",
    "    def bias_variable(self, shape):\n",
    "        initial = tf.constant(0.01, shape=shape)\n",
    "        return tf.Variable(initial)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "def test():\n",
    "    total_reward = 0\n",
    "    # 初始一个棋盘\n",
    "    chess = ChessBoard()  # 创建一个主棋盘\n",
    "    chess.reset()\n",
    "    \n",
    "    state = chess.board\n",
    "    camp = -1\n",
    "    state = np.reshape(state, [-1])\n",
    "    state = np.append(state, camp)\n",
    "    \n",
    "    for j in range(300):\n",
    "        # 开始走棋\n",
    "        action = agent.action(state)  # 按照Q网络的走一步\n",
    "        action = [math.floor(action/ChessBoard.SIZE), action %\n",
    "                  ChessBoard.SIZE, camp]  # 转化为二维棋盘坐标\n",
    "\n",
    "        state, reward, done, _ = chess.draw_XY(action[0], action[1])\n",
    "        if j % 2 == 0:\n",
    "            camp = 1\n",
    "        else:\n",
    "            camp = -1\n",
    "        state = np.append(state, camp)\n",
    "        total_reward += reward\n",
    "\n",
    "        # 打印棋盘\n",
    "        os.system(\"cls\")\n",
    "        chess.printChess()\n",
    "        if camp == 1:\n",
    "            print(\" BLACK %d   %d\\n\" % (action[0], action[1]))\n",
    "        else:\n",
    "            print(\" WHITE %d   %d\\n\" % (action[0], action[1]))\n",
    "        time.sleep(2)  # 睡眠延时\n",
    "\n",
    "        # 结束判断\n",
    "        if done:\n",
    "            print(\"done step:%d  episode:%d\" % (j, episode))\n",
    "            # print('done')\n",
    "            time.sleep(5)\n",
    "            break\n",
    "    ave_reward = total_reward\n",
    "    print('episode: ', episode, 'Evaluation Average Reward:', ave_reward)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_step = []\n",
    "agent = DQN()  # 创建网络对象\n",
    "agent.copy()  # 拷贝Q网络参数到targetQ"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "def main():\n",
    "    # 一些超参数\n",
    "    EPISODE = 50000\n",
    "    STEP = 300\n",
    "    TEST = 1\n",
    "\n",
    "    chess = ChessBoard()  # 创建一个主棋盘\n",
    "\n",
    "    for episode in range(EPISODE):\n",
    "        # 初始一个棋盘\n",
    "        chess.reset()\n",
    "        state = chess.board\n",
    "        camp = -1\n",
    "        state = np.reshape(state, [-1])  # 二维数组转换为一维数组\n",
    "        state = np.append(state, camp)\n",
    "        # 训练\n",
    "        for step in range(STEP):\n",
    "            # 自己下一步棋\n",
    "            action_1d = agent.egreedy_action(state)  # 有随机概率的走一步\n",
    "            action_2d = [math.floor(action_1d / ChessBoard.SIZE), action_1d %\n",
    "                         ChessBoard.SIZE, camp]  # 转化为二维棋盘坐标\n",
    "            # 在模拟棋盘上落子\n",
    "            next_state_2d, reward, done, _ = chess.draw_XY(\n",
    "                action_2d[0], action_2d[1])\n",
    "            next_state = np.reshape(next_state_2d, [-1])\n",
    "            # 构造数据\n",
    "            if step % 2 == 0:\n",
    "                camp = 1\n",
    "            else:\n",
    "                camp = -1\n",
    "            next_state = np.append(next_state, camp)\n",
    "            # 定义奖励\n",
    "            reward_agent = reward\n",
    "            agent.perceive(state, action_1d, reward, next_state, done)\n",
    "            state = next_state\n",
    "            # 判断这一步走了每    没走说明这一步是非法的，发生了碰撞，立即结束当前棋局，重开一局\n",
    "            # 上面的判断不是很对\n",
    "            # 成功落子后反而跳出了\n",
    "            if done:\n",
    "                #chess.printChess()\n",
    "                train_step.append(step)\n",
    "                print(\"done step:%d  episode:%d\" % (step, episode))\n",
    "                break\n",
    "\n",
    "        \"\"\"单步落子的查看，暂不跑\n",
    "        if episode % 100 == 99:\n",
    "            print(\"\\n\\nTest block\")\n",
    "            total_reward = 0\n",
    "            # 测试 TEST盘棋\n",
    "            for i in range(TEST):\n",
    "                # 初始一个棋盘\n",
    "                chess.reset()\n",
    "                state = chess.board\n",
    "                camp = -1\n",
    "                state = np.reshape(state, [-1])\n",
    "                state = np.append(state, camp)\n",
    "                for j in range(STEP):\n",
    "                    # 开始走棋\n",
    "                    action = agent.action(state)  # 按照Q网络的走一步\n",
    "                    action = [math.floor(action/ChessBoard.SIZE), action %\n",
    "                              ChessBoard.SIZE, camp]  # 转化为二维棋盘坐标\n",
    "\n",
    "                    state, reward, done, _ = chess.draw_XY(\n",
    "                        action[0], action[1])\n",
    "                    if j % 2 == 0:\n",
    "                        camp = 1\n",
    "                    else:\n",
    "                        camp = -1\n",
    "                    state = np.append(state, camp)\n",
    "                    total_reward += reward\n",
    "\n",
    "                    # 打印棋盘\n",
    "                    os.system(\"cls\")\n",
    "                    chess.printChess()\n",
    "                    if camp == 1:\n",
    "                        print(\"\\n BLACK %d   %d\" % (action[0], action[1]))\n",
    "                    else:\n",
    "                        print(\"\\n WHITE %d   %d\" % (action[0], action[1]))\n",
    "                    time.sleep(2)  # 睡眠延时\n",
    "\n",
    "                    # 结束判断\n",
    "                    if done:\n",
    "                        print(\"done step:%d  episode:%d\" % (j, episode))\n",
    "                        # print('done')\n",
    "                        time.sleep(5)\n",
    "                        break\n",
    "\n",
    "            ave_reward = total_reward / TEST\n",
    "            print('episode: ', episode, 'Evaluation Average Reward:', ave_reward)\n",
    "        \"\"\""
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 开始训练"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "done step:52  episode:0\n",
      "done step:40  episode:1\n",
      "done step:53  episode:2\n",
      "done step:41  episode:3\n",
      "done step:47  episode:4\n",
      "done step:33  episode:5\n",
      "done step:52  episode:6\n",
      "done step:35  episode:7\n",
      "done step:47  episode:8\n",
      "done step:41  episode:9\n",
      "done step:32  episode:10\n",
      "done step:35  episode:11\n",
      "done step:33  episode:12\n",
      "done step:12  episode:13\n",
      "done step:10  episode:14\n",
      "done step:43  episode:15\n",
      "done step:24  episode:16\n",
      "done step:10  episode:17\n",
      "done step:48  episode:18\n",
      "done step:40  episode:19\n",
      "done step:23  episode:20\n",
      "done step:65  episode:21\n",
      "done step:25  episode:22\n",
      "done step:22  episode:23\n",
      "done step:30  episode:24\n",
      "done step:44  episode:25\n",
      "done step:22  episode:26\n",
      "done step:46  episode:27\n",
      "done step:50  episode:28\n",
      "done step:41  episode:29\n",
      "done step:40  episode:30\n",
      "done step:32  episode:31\n",
      "done step:33  episode:32\n",
      "done step:42  episode:33\n",
      "done step:37  episode:34\n",
      "done step:23  episode:35\n",
      "done step:30  episode:36\n",
      "done step:31  episode:37\n",
      "done step:22  episode:38\n",
      "done step:41  episode:39\n",
      "done step:44  episode:40\n",
      "done step:39  episode:41\n",
      "done step:27  episode:42\n",
      "done step:47  episode:43\n",
      "done step:31  episode:44\n",
      "done step:20  episode:45\n",
      "done step:20  episode:46\n",
      "done step:37  episode:47\n",
      "done step:62  episode:48\n",
      "done step:33  episode:49\n",
      "done step:14  episode:50\n",
      "done step:29  episode:51\n",
      "done step:53  episode:52\n",
      "done step:63  episode:53\n",
      "done step:14  episode:54\n",
      "done step:26  episode:55\n",
      "done step:33  episode:56\n",
      "done step:37  episode:57\n",
      "done step:39  episode:58\n",
      "done step:34  episode:59\n",
      "done step:32  episode:60\n",
      "done step:77  episode:61\n",
      "done step:29  episode:62\n",
      "done step:38  episode:63\n",
      "done step:57  episode:64\n",
      "done step:73  episode:65\n",
      "done step:35  episode:66\n",
      "done step:19  episode:67\n",
      "done step:33  episode:68\n",
      "done step:18  episode:69\n",
      "done step:30  episode:70\n",
      "done step:37  episode:71\n",
      "done step:54  episode:72\n",
      "done step:41  episode:73\n",
      "done step:35  episode:74\n",
      "done step:29  episode:75\n",
      "done step:61  episode:76\n",
      "done step:36  episode:77\n",
      "done step:37  episode:78\n",
      "done step:37  episode:79\n",
      "done step:29  episode:80\n",
      "done step:18  episode:81\n",
      "done step:22  episode:82\n",
      "done step:20  episode:83\n",
      "done step:26  episode:84\n",
      "done step:38  episode:85\n",
      "done step:39  episode:86\n",
      "done step:32  episode:87\n",
      "done step:25  episode:88\n",
      "done step:16  episode:89\n",
      "done step:29  episode:90\n",
      "done step:79  episode:91\n",
      "done step:32  episode:92\n",
      "done step:142  episode:93\n",
      "done step:35  episode:94\n",
      "done step:31  episode:95\n",
      "done step:41  episode:96\n",
      "done step:27  episode:97\n",
      "done step:39  episode:98\n",
      "done step:21  episode:99\n",
      "done step:25  episode:100\n",
      "done step:33  episode:101\n",
      "done step:25  episode:102\n",
      "done step:21  episode:103\n",
      "done step:35  episode:104\n",
      "done step:37  episode:105\n",
      "done step:8  episode:106\n",
      "done step:30  episode:107\n",
      "done step:19  episode:108\n",
      "done step:41  episode:109\n",
      "done step:14  episode:110\n",
      "done step:23  episode:111\n",
      "done step:22  episode:112\n",
      "done step:41  episode:113\n",
      "done step:35  episode:114\n",
      "done step:23  episode:115\n",
      "done step:44  episode:116\n",
      "done step:33  episode:117\n",
      "done step:20  episode:118\n",
      "done step:49  episode:119\n",
      "done step:17  episode:120\n",
      "done step:74  episode:121\n",
      "done step:40  episode:122\n",
      "done step:46  episode:123\n",
      "done step:16  episode:124\n",
      "done step:35  episode:125\n",
      "done step:31  episode:126\n",
      "done step:40  episode:127\n",
      "done step:18  episode:128\n",
      "done step:25  episode:129\n",
      "done step:47  episode:130\n",
      "done step:37  episode:131\n",
      "done step:38  episode:132\n",
      "done step:35  episode:133\n",
      "done step:19  episode:134\n",
      "done step:10  episode:135\n",
      "done step:38  episode:136\n",
      "done step:39  episode:137\n",
      "done step:39  episode:138\n",
      "done step:50  episode:139\n",
      "done step:28  episode:140\n",
      "done step:43  episode:141\n",
      "done step:49  episode:142\n",
      "done step:30  episode:143\n",
      "done step:27  episode:144\n",
      "done step:35  episode:145\n",
      "done step:37  episode:146\n",
      "done step:91  episode:147\n",
      "done step:37  episode:148\n",
      "done step:40  episode:149\n",
      "done step:43  episode:150\n",
      "done step:33  episode:151\n",
      "done step:29  episode:152\n",
      "done step:39  episode:153\n",
      "done step:29  episode:154\n",
      "done step:37  episode:155\n",
      "done step:35  episode:156\n",
      "done step:27  episode:157\n",
      "done step:43  episode:158\n",
      "done step:47  episode:159\n",
      "done step:29  episode:160\n",
      "done step:27  episode:161\n",
      "done step:24  episode:162\n",
      "done step:43  episode:163\n",
      "done step:32  episode:164\n",
      "done step:25  episode:165\n",
      "done step:37  episode:166\n",
      "done step:46  episode:167\n",
      "done step:35  episode:168\n",
      "done step:51  episode:169\n",
      "done step:38  episode:170\n",
      "done step:45  episode:171\n",
      "done step:43  episode:172\n",
      "done step:31  episode:173\n",
      "done step:21  episode:174\n",
      "done step:36  episode:175\n",
      "done step:31  episode:176\n",
      "done step:23  episode:177\n",
      "done step:37  episode:178\n",
      "done step:35  episode:179\n",
      "done step:31  episode:180\n",
      "done step:35  episode:181\n",
      "done step:44  episode:182\n",
      "done step:10  episode:183\n",
      "done step:35  episode:184\n",
      "done step:40  episode:185\n",
      "done step:104  episode:186\n",
      "done step:33  episode:187\n",
      "done step:106  episode:188\n",
      "done step:25  episode:189\n",
      "done step:84  episode:190\n",
      "done step:32  episode:191\n",
      "done step:47  episode:192\n",
      "done step:35  episode:193\n",
      "done step:80  episode:194\n",
      "done step:44  episode:195\n",
      "done step:41  episode:196\n",
      "done step:60  episode:197\n",
      "done step:35  episode:198\n",
      "done step:26  episode:199\n",
      "done step:28  episode:200\n",
      "done step:100  episode:201\n",
      "done step:32  episode:202\n",
      "done step:38  episode:203\n",
      "done step:38  episode:204\n",
      "done step:26  episode:205\n",
      "done step:32  episode:206\n",
      "done step:31  episode:207\n",
      "done step:38  episode:208\n",
      "done step:27  episode:209\n",
      "done step:38  episode:210\n",
      "done step:35  episode:211\n",
      "done step:46  episode:212\n",
      "done step:40  episode:213\n",
      "done step:50  episode:214\n",
      "done step:29  episode:215\n",
      "done step:30  episode:216\n",
      "done step:34  episode:217\n",
      "done step:38  episode:218\n",
      "done step:33  episode:219\n",
      "done step:29  episode:220\n",
      "done step:28  episode:221\n",
      "done step:38  episode:222\n",
      "done step:31  episode:223\n",
      "done step:37  episode:224\n",
      "done step:33  episode:225\n",
      "done step:75  episode:226\n",
      "done step:24  episode:227\n",
      "done step:39  episode:228\n",
      "done step:89  episode:229\n",
      "done step:40  episode:230\n",
      "done step:41  episode:231\n",
      "done step:46  episode:232\n",
      "done step:36  episode:233\n",
      "done step:37  episode:234\n",
      "done step:43  episode:235\n",
      "done step:39  episode:236\n",
      "done step:29  episode:237\n",
      "done step:45  episode:238\n",
      "done step:51  episode:239\n",
      "done step:43  episode:240\n",
      "done step:162  episode:241\n",
      "done step:137  episode:242\n",
      "done step:60  episode:243\n",
      "done step:36  episode:244\n",
      "done step:51  episode:245\n",
      "done step:28  episode:246\n",
      "done step:46  episode:247\n",
      "done step:39  episode:248\n",
      "done step:35  episode:249\n",
      "done step:37  episode:250\n",
      "done step:28  episode:251\n",
      "done step:26  episode:252\n",
      "done step:29  episode:253\n",
      "done step:34  episode:254\n",
      "done step:37  episode:255\n",
      "done step:37  episode:256\n",
      "done step:56  episode:257\n",
      "done step:46  episode:258\n",
      "done step:42  episode:259\n",
      "done step:56  episode:260\n",
      "done step:42  episode:261\n",
      "done step:31  episode:262\n",
      "done step:17  episode:263\n",
      "done step:45  episode:264\n",
      "done step:37  episode:265\n",
      "done step:73  episode:266\n",
      "done step:32  episode:267\n",
      "done step:30  episode:268\n",
      "done step:34  episode:269\n",
      "done step:44  episode:270\n",
      "done step:31  episode:271\n",
      "done step:34  episode:272\n",
      "done step:28  episode:273\n",
      "done step:35  episode:274\n",
      "done step:38  episode:275\n",
      "done step:44  episode:276\n",
      "done step:46  episode:277\n",
      "done step:25  episode:278\n",
      "done step:37  episode:279\n",
      "done step:45  episode:280\n",
      "done step:31  episode:281\n",
      "done step:23  episode:282\n",
      "done step:43  episode:283\n",
      "done step:45  episode:284\n",
      "done step:31  episode:285\n",
      "done step:39  episode:286\n",
      "done step:33  episode:287\n",
      "done step:49  episode:288\n",
      "done step:33  episode:289\n",
      "done step:37  episode:290\n",
      "done step:43  episode:291\n",
      "done step:27  episode:292\n",
      "done step:33  episode:293\n",
      "done step:43  episode:294\n",
      "done step:35  episode:295\n",
      "done step:39  episode:296\n",
      "done step:25  episode:297\n",
      "done step:45  episode:298\n",
      "done step:37  episode:299\n",
      "done step:32  episode:300\n",
      "done step:34  episode:301\n",
      "done step:41  episode:302\n",
      "done step:43  episode:303\n",
      "done step:37  episode:304\n",
      "done step:35  episode:305\n",
      "done step:43  episode:306\n",
      "done step:50  episode:307\n",
      "done step:37  episode:308\n",
      "done step:41  episode:309\n",
      "done step:47  episode:310\n",
      "done step:34  episode:311\n",
      "done step:38  episode:312\n",
      "done step:37  episode:313\n",
      "done step:36  episode:314\n",
      "done step:49  episode:315\n",
      "done step:41  episode:316\n",
      "done step:43  episode:317\n",
      "done step:37  episode:318\n",
      "done step:33  episode:319\n",
      "done step:31  episode:320\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "done step:43  episode:321\n",
      "done step:143  episode:322\n",
      "done step:44  episode:323\n",
      "done step:29  episode:324\n",
      "done step:54  episode:325\n",
      "done step:36  episode:326\n",
      "done step:43  episode:327\n",
      "done step:76  episode:328\n",
      "done step:25  episode:329\n",
      "done step:161  episode:330\n",
      "done step:45  episode:331\n",
      "done step:35  episode:332\n",
      "done step:27  episode:333\n",
      "done step:36  episode:334\n",
      "done step:99  episode:335\n",
      "done step:34  episode:336\n",
      "done step:35  episode:337\n",
      "done step:45  episode:338\n",
      "done step:46  episode:339\n",
      "done step:32  episode:340\n",
      "done step:42  episode:341\n",
      "done step:27  episode:342\n",
      "done step:76  episode:343\n",
      "done step:36  episode:344\n",
      "done step:45  episode:345\n",
      "done step:43  episode:346\n",
      "done step:34  episode:347\n",
      "done step:28  episode:348\n",
      "done step:41  episode:349\n",
      "done step:39  episode:350\n",
      "done step:44  episode:351\n",
      "done step:27  episode:352\n",
      "done step:47  episode:353\n",
      "done step:33  episode:354\n",
      "done step:33  episode:355\n",
      "done step:32  episode:356\n",
      "done step:41  episode:357\n",
      "done step:48  episode:358\n",
      "done step:43  episode:359\n",
      "done step:26  episode:360\n",
      "done step:27  episode:361\n",
      "done step:30  episode:362\n",
      "done step:27  episode:363\n",
      "done step:29  episode:364\n",
      "done step:33  episode:365\n",
      "done step:30  episode:366\n",
      "done step:41  episode:367\n",
      "done step:87  episode:368\n",
      "done step:26  episode:369\n",
      "done step:41  episode:370\n",
      "done step:25  episode:371\n",
      "done step:108  episode:372\n",
      "done step:37  episode:373\n",
      "done step:37  episode:374\n",
      "done step:35  episode:375\n",
      "done step:40  episode:376\n",
      "done step:31  episode:377\n",
      "done step:23  episode:378\n",
      "done step:23  episode:379\n",
      "done step:27  episode:380\n",
      "done step:34  episode:381\n",
      "done step:45  episode:382\n",
      "done step:34  episode:383\n",
      "done step:31  episode:384\n",
      "done step:30  episode:385\n",
      "done step:32  episode:386\n",
      "done step:46  episode:387\n",
      "done step:27  episode:388\n",
      "done step:31  episode:389\n",
      "done step:29  episode:390\n",
      "done step:42  episode:391\n",
      "done step:44  episode:392\n",
      "done step:46  episode:393\n",
      "done step:33  episode:394\n",
      "done step:46  episode:395\n",
      "done step:26  episode:396\n",
      "done step:29  episode:397\n",
      "done step:44  episode:398\n",
      "done step:41  episode:399\n",
      "done step:35  episode:400\n",
      "done step:34  episode:401\n",
      "done step:43  episode:402\n",
      "done step:32  episode:403\n",
      "done step:41  episode:404\n",
      "done step:38  episode:405\n",
      "done step:21  episode:406\n",
      "done step:33  episode:407\n",
      "done step:31  episode:408\n",
      "done step:30  episode:409\n",
      "done step:38  episode:410\n",
      "done step:30  episode:411\n",
      "done step:41  episode:412\n",
      "done step:39  episode:413\n",
      "done step:145  episode:414\n",
      "done step:31  episode:415\n",
      "done step:59  episode:416\n",
      "done step:34  episode:417\n",
      "done step:30  episode:418\n",
      "done step:43  episode:419\n",
      "done step:44  episode:420\n",
      "done step:33  episode:421\n",
      "done step:42  episode:422\n",
      "done step:35  episode:423\n",
      "done step:31  episode:424\n",
      "done step:46  episode:425\n",
      "done step:17  episode:426\n",
      "done step:37  episode:427\n",
      "done step:20  episode:428\n",
      "done step:20  episode:429\n",
      "done step:34  episode:430\n",
      "done step:16  episode:431\n",
      "done step:29  episode:432\n",
      "done step:37  episode:433\n",
      "done step:37  episode:434\n",
      "done step:32  episode:435\n",
      "done step:15  episode:436\n",
      "done step:29  episode:437\n",
      "done step:43  episode:438\n",
      "done step:37  episode:439\n",
      "done step:38  episode:440\n",
      "done step:20  episode:441\n",
      "done step:296  episode:442\n",
      "done step:33  episode:443\n",
      "done step:41  episode:444\n",
      "done step:40  episode:445\n",
      "done step:45  episode:446\n",
      "done step:46  episode:447\n",
      "done step:24  episode:448\n",
      "done step:45  episode:449\n",
      "done step:30  episode:450\n",
      "done step:37  episode:451\n",
      "done step:32  episode:452\n",
      "done step:147  episode:453\n",
      "done step:49  episode:454\n",
      "done step:35  episode:455\n",
      "done step:30  episode:456\n",
      "done step:33  episode:457\n",
      "done step:33  episode:458\n",
      "done step:58  episode:459\n",
      "done step:18  episode:460\n",
      "done step:16  episode:461\n",
      "done step:18  episode:462\n",
      "done step:15  episode:463\n",
      "done step:21  episode:464\n",
      "done step:28  episode:465\n",
      "done step:29  episode:466\n",
      "done step:43  episode:467\n",
      "done step:16  episode:468\n",
      "done step:39  episode:469\n",
      "done step:16  episode:470\n",
      "done step:14  episode:471\n",
      "done step:28  episode:472\n",
      "done step:24  episode:473\n",
      "done step:35  episode:474\n",
      "done step:42  episode:475\n",
      "done step:48  episode:476\n",
      "done step:30  episode:477\n",
      "done step:37  episode:478\n",
      "done step:33  episode:479\n",
      "done step:41  episode:480\n",
      "done step:44  episode:481\n",
      "done step:37  episode:482\n",
      "done step:36  episode:483\n",
      "done step:43  episode:484\n",
      "done step:45  episode:485\n",
      "done step:37  episode:486\n",
      "done step:26  episode:487\n",
      "done step:46  episode:488\n",
      "done step:39  episode:489\n",
      "done step:22  episode:490\n",
      "done step:39  episode:491\n",
      "done step:62  episode:492\n",
      "done step:42  episode:493\n",
      "done step:37  episode:494\n",
      "done step:41  episode:495\n",
      "done step:17  episode:496\n",
      "done step:22  episode:497\n",
      "done step:26  episode:498\n",
      "done step:19  episode:499\n",
      "done step:34  episode:500\n",
      "done step:48  episode:501\n",
      "done step:24  episode:503\n",
      "done step:21  episode:504\n",
      "done step:33  episode:505\n",
      "done step:34  episode:506\n",
      "done step:26  episode:507\n",
      "done step:41  episode:508\n",
      "done step:25  episode:509\n",
      "done step:39  episode:510\n",
      "done step:30  episode:511\n",
      "done step:23  episode:512\n",
      "done step:23  episode:513\n",
      "done step:40  episode:514\n",
      "done step:35  episode:515\n",
      "done step:41  episode:516\n",
      "done step:46  episode:517\n",
      "done step:42  episode:518\n",
      "done step:23  episode:519\n",
      "done step:35  episode:520\n",
      "done step:39  episode:521\n",
      "done step:39  episode:522\n",
      "done step:39  episode:523\n",
      "done step:43  episode:524\n",
      "done step:43  episode:525\n",
      "done step:45  episode:526\n",
      "done step:25  episode:527\n",
      "done step:41  episode:528\n",
      "done step:42  episode:529\n",
      "done step:26  episode:530\n",
      "done step:38  episode:531\n",
      "done step:44  episode:532\n",
      "done step:39  episode:533\n",
      "done step:22  episode:534\n",
      "done step:130  episode:535\n",
      "done step:43  episode:536\n",
      "done step:24  episode:537\n",
      "done step:36  episode:538\n",
      "done step:31  episode:539\n",
      "done step:41  episode:540\n",
      "done step:32  episode:541\n",
      "done step:41  episode:542\n",
      "done step:38  episode:543\n",
      "done step:41  episode:544\n",
      "done step:35  episode:545\n",
      "done step:35  episode:546\n",
      "done step:21  episode:547\n",
      "done step:30  episode:548\n",
      "done step:40  episode:549\n",
      "done step:41  episode:550\n",
      "done step:38  episode:551\n",
      "done step:106  episode:552\n",
      "done step:43  episode:553\n",
      "done step:28  episode:554\n",
      "done step:40  episode:555\n",
      "done step:37  episode:556\n",
      "done step:28  episode:557\n",
      "done step:35  episode:558\n",
      "done step:41  episode:559\n",
      "done step:34  episode:560\n",
      "done step:33  episode:561\n",
      "done step:38  episode:562\n",
      "done step:28  episode:563\n",
      "done step:46  episode:564\n",
      "done step:49  episode:565\n",
      "done step:34  episode:566\n",
      "done step:23  episode:567\n",
      "done step:38  episode:568\n",
      "done step:33  episode:569\n",
      "done step:27  episode:570\n",
      "done step:24  episode:571\n",
      "done step:36  episode:572\n",
      "done step:37  episode:573\n",
      "done step:43  episode:574\n",
      "done step:20  episode:575\n",
      "done step:46  episode:576\n",
      "done step:15  episode:577\n",
      "done step:45  episode:578\n",
      "done step:38  episode:579\n",
      "done step:36  episode:580\n",
      "done step:37  episode:581\n",
      "done step:25  episode:582\n",
      "done step:33  episode:583\n",
      "done step:39  episode:584\n",
      "done step:47  episode:585\n",
      "done step:37  episode:586\n",
      "done step:32  episode:587\n",
      "done step:37  episode:588\n",
      "done step:22  episode:589\n",
      "done step:43  episode:590\n",
      "done step:21  episode:591\n",
      "done step:41  episode:592\n",
      "done step:39  episode:593\n",
      "done step:27  episode:594\n",
      "done step:255  episode:595\n",
      "done step:19  episode:596\n",
      "done step:36  episode:597\n",
      "done step:37  episode:598\n",
      "done step:41  episode:599\n",
      "done step:38  episode:600\n",
      "done step:46  episode:601\n",
      "done step:27  episode:602\n",
      "done step:26  episode:603\n",
      "done step:20  episode:604\n",
      "done step:43  episode:605\n",
      "done step:40  episode:606\n",
      "done step:46  episode:607\n",
      "done step:25  episode:608\n",
      "done step:33  episode:609\n",
      "done step:20  episode:610\n",
      "done step:41  episode:611\n",
      "done step:34  episode:612\n",
      "done step:42  episode:613\n",
      "done step:34  episode:614\n",
      "done step:23  episode:615\n",
      "done step:35  episode:616\n",
      "done step:32  episode:617\n",
      "done step:25  episode:618\n",
      "done step:47  episode:619\n",
      "done step:34  episode:620\n",
      "done step:43  episode:621\n",
      "done step:29  episode:622\n",
      "done step:152  episode:623\n",
      "done step:41  episode:624\n",
      "done step:34  episode:625\n",
      "done step:43  episode:626\n",
      "done step:39  episode:627\n",
      "done step:43  episode:628\n",
      "done step:46  episode:629\n",
      "done step:43  episode:630\n",
      "done step:45  episode:631\n",
      "done step:43  episode:632\n",
      "done step:45  episode:633\n",
      "done step:41  episode:634\n",
      "done step:37  episode:635\n",
      "done step:34  episode:636\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "done step:26  episode:637\n",
      "done step:22  episode:638\n",
      "done step:27  episode:639\n",
      "done step:31  episode:640\n",
      "done step:41  episode:641\n",
      "done step:35  episode:642\n",
      "done step:22  episode:643\n",
      "done step:169  episode:644\n",
      "done step:21  episode:645\n",
      "done step:31  episode:646\n",
      "done step:34  episode:647\n",
      "done step:44  episode:648\n",
      "done step:31  episode:649\n",
      "done step:43  episode:650\n",
      "done step:28  episode:651\n",
      "done step:35  episode:652\n",
      "done step:35  episode:653\n",
      "done step:31  episode:654\n",
      "done step:28  episode:655\n",
      "done step:43  episode:656\n",
      "done step:40  episode:657\n",
      "done step:29  episode:658\n",
      "done step:45  episode:659\n",
      "done step:43  episode:660\n",
      "done step:31  episode:661\n",
      "done step:38  episode:662\n",
      "done step:29  episode:663\n",
      "done step:41  episode:664\n",
      "done step:68  episode:665\n",
      "done step:39  episode:666\n",
      "done step:39  episode:667\n",
      "done step:45  episode:668\n",
      "done step:43  episode:669\n",
      "done step:43  episode:670\n",
      "done step:42  episode:671\n",
      "done step:30  episode:672\n",
      "done step:26  episode:673\n",
      "done step:42  episode:674\n",
      "done step:43  episode:675\n",
      "done step:43  episode:676\n",
      "done step:37  episode:677\n",
      "done step:37  episode:678\n",
      "done step:42  episode:679\n",
      "done step:39  episode:680\n",
      "done step:45  episode:681\n",
      "done step:35  episode:682\n",
      "done step:35  episode:683\n",
      "done step:35  episode:684\n",
      "done step:43  episode:685\n",
      "done step:43  episode:686\n",
      "done step:28  episode:687\n",
      "done step:47  episode:688\n",
      "done step:28  episode:689\n",
      "done step:24  episode:690\n",
      "done step:28  episode:691\n",
      "done step:44  episode:693\n",
      "done step:42  episode:694\n",
      "done step:47  episode:695\n",
      "done step:43  episode:696\n",
      "done step:39  episode:697\n",
      "done step:28  episode:698\n",
      "done step:206  episode:699\n",
      "done step:35  episode:700\n",
      "done step:15  episode:701\n",
      "done step:18  episode:702\n",
      "done step:43  episode:703\n",
      "done step:17  episode:704\n",
      "done step:22  episode:705\n",
      "done step:19  episode:706\n",
      "done step:44  episode:708\n",
      "done step:29  episode:709\n",
      "done step:31  episode:710\n",
      "done step:29  episode:711\n",
      "done step:45  episode:712\n",
      "done step:45  episode:713\n",
      "done step:40  episode:714\n",
      "done step:38  episode:715\n",
      "done step:33  episode:716\n",
      "done step:24  episode:717\n",
      "done step:43  episode:718\n",
      "done step:45  episode:719\n",
      "done step:43  episode:720\n",
      "done step:31  episode:721\n",
      "done step:33  episode:722\n",
      "done step:15  episode:723\n",
      "done step:39  episode:724\n",
      "done step:44  episode:725\n",
      "done step:21  episode:726\n",
      "done step:28  episode:727\n",
      "done step:35  episode:728\n",
      "done step:15  episode:729\n",
      "done step:22  episode:730\n",
      "done step:28  episode:731\n",
      "done step:15  episode:732\n",
      "done step:45  episode:733\n",
      "done step:43  episode:734\n",
      "done step:43  episode:735\n",
      "done step:26  episode:737\n",
      "done step:44  episode:738\n",
      "done step:37  episode:739\n",
      "done step:35  episode:740\n",
      "done step:28  episode:741\n",
      "done step:24  episode:742\n",
      "done step:260  episode:743\n",
      "done step:24  episode:744\n",
      "done step:41  episode:745\n",
      "done step:13  episode:746\n",
      "done step:42  episode:747\n",
      "done step:33  episode:748\n",
      "done step:41  episode:749\n",
      "done step:43  episode:750\n",
      "done step:38  episode:751\n",
      "done step:43  episode:752\n",
      "done step:31  episode:753\n",
      "done step:24  episode:754\n",
      "done step:32  episode:755\n",
      "done step:15  episode:756\n",
      "done step:221  episode:757\n",
      "done step:26  episode:758\n",
      "done step:180  episode:760\n",
      "done step:47  episode:761\n",
      "done step:32  episode:762\n",
      "done step:36  episode:763\n",
      "done step:47  episode:764\n",
      "done step:47  episode:765\n",
      "done step:36  episode:766\n",
      "done step:32  episode:767\n",
      "done step:39  episode:768\n",
      "done step:15  episode:769\n",
      "done step:33  episode:770\n",
      "done step:36  episode:771\n",
      "done step:40  episode:772\n",
      "done step:15  episode:773\n",
      "done step:34  episode:774\n",
      "done step:42  episode:775\n",
      "done step:15  episode:776\n",
      "done step:33  episode:777\n",
      "done step:26  episode:778\n",
      "done step:33  episode:779\n",
      "done step:42  episode:780\n",
      "done step:36  episode:781\n",
      "done step:13  episode:782\n",
      "done step:48  episode:783\n",
      "done step:32  episode:784\n",
      "done step:13  episode:785\n",
      "done step:39  episode:786\n",
      "done step:31  episode:787\n",
      "done step:29  episode:788\n",
      "done step:13  episode:789\n",
      "done step:39  episode:790\n",
      "done step:22  episode:791\n",
      "done step:41  episode:792\n",
      "done step:30  episode:793\n",
      "done step:39  episode:794\n",
      "done step:34  episode:795\n",
      "done step:40  episode:796\n",
      "done step:39  episode:797\n",
      "done step:27  episode:798\n",
      "done step:40  episode:799\n",
      "done step:34  episode:800\n",
      "done step:39  episode:801\n",
      "done step:31  episode:802\n",
      "done step:13  episode:803\n",
      "done step:35  episode:804\n",
      "done step:13  episode:805\n",
      "done step:42  episode:806\n",
      "done step:32  episode:807\n",
      "done step:37  episode:808\n",
      "done step:28  episode:809\n",
      "done step:37  episode:810\n",
      "done step:37  episode:811\n",
      "done step:33  episode:812\n",
      "done step:15  episode:813\n",
      "done step:43  episode:814\n",
      "done step:13  episode:815\n",
      "done step:35  episode:816\n",
      "done step:27  episode:817\n",
      "done step:37  episode:818\n",
      "done step:29  episode:819\n",
      "done step:42  episode:820\n",
      "done step:43  episode:821\n",
      "done step:35  episode:822\n",
      "done step:49  episode:823\n",
      "done step:15  episode:824\n",
      "done step:46  episode:825\n",
      "done step:43  episode:827\n",
      "done step:32  episode:828\n",
      "done step:43  episode:829\n",
      "done step:28  episode:830\n",
      "done step:26  episode:831\n",
      "done step:43  episode:832\n",
      "done step:28  episode:833\n",
      "done step:33  episode:834\n",
      "done step:30  episode:835\n",
      "done step:38  episode:836\n",
      "done step:39  episode:837\n",
      "done step:45  episode:838\n",
      "done step:48  episode:839\n",
      "done step:32  episode:840\n",
      "done step:15  episode:841\n",
      "done step:13  episode:842\n",
      "done step:36  episode:843\n",
      "done step:42  episode:844\n",
      "done step:15  episode:845\n",
      "done step:32  episode:846\n",
      "done step:43  episode:847\n",
      "done step:38  episode:848\n",
      "done step:19  episode:849\n",
      "done step:31  episode:850\n",
      "done step:13  episode:851\n",
      "done step:43  episode:852\n",
      "done step:42  episode:853\n",
      "done step:25  episode:854\n",
      "done step:28  episode:855\n",
      "done step:26  episode:856\n",
      "done step:19  episode:857\n",
      "done step:28  episode:858\n",
      "done step:19  episode:860\n",
      "done step:26  episode:861\n",
      "done step:48  episode:862\n",
      "done step:30  episode:863\n",
      "done step:26  episode:864\n",
      "done step:197  episode:865\n",
      "done step:23  episode:866\n",
      "done step:38  episode:867\n",
      "done step:15  episode:868\n",
      "done step:28  episode:869\n",
      "done step:19  episode:870\n",
      "done step:28  episode:871\n",
      "done step:25  episode:872\n",
      "done step:43  episode:873\n",
      "done step:15  episode:874\n",
      "done step:17  episode:875\n",
      "done step:42  episode:876\n",
      "done step:26  episode:877\n",
      "done step:43  episode:878\n",
      "done step:40  episode:879\n",
      "done step:17  episode:880\n",
      "done step:19  episode:881\n",
      "done step:13  episode:882\n",
      "done step:17  episode:883\n",
      "done step:17  episode:884\n",
      "done step:40  episode:885\n",
      "done step:13  episode:886\n",
      "done step:15  episode:887\n",
      "done step:17  episode:888\n",
      "done step:17  episode:889\n",
      "done step:15  episode:890\n",
      "done step:15  episode:891\n",
      "done step:34  episode:892\n",
      "done step:13  episode:893\n",
      "done step:17  episode:894\n",
      "done step:15  episode:895\n",
      "done step:15  episode:896\n",
      "done step:15  episode:897\n",
      "done step:15  episode:898\n",
      "done step:19  episode:899\n",
      "done step:17  episode:900\n",
      "done step:17  episode:901\n",
      "done step:13  episode:902\n",
      "done step:15  episode:903\n",
      "done step:13  episode:904\n",
      "done step:13  episode:905\n",
      "done step:15  episode:906\n",
      "done step:15  episode:907\n",
      "done step:15  episode:908\n",
      "done step:13  episode:909\n",
      "done step:11  episode:910\n",
      "done step:28  episode:911\n",
      "done step:32  episode:912\n",
      "done step:15  episode:913\n",
      "done step:15  episode:914\n",
      "done step:15  episode:915\n",
      "done step:15  episode:916\n",
      "done step:13  episode:917\n",
      "done step:15  episode:918\n",
      "done step:15  episode:919\n",
      "done step:28  episode:920\n",
      "done step:13  episode:921\n",
      "done step:15  episode:922\n",
      "done step:15  episode:923\n",
      "done step:43  episode:924\n",
      "done step:13  episode:925\n",
      "done step:24  episode:926\n",
      "done step:13  episode:927\n",
      "done step:15  episode:928\n",
      "done step:15  episode:929\n",
      "done step:17  episode:930\n",
      "done step:24  episode:931\n",
      "done step:13  episode:932\n",
      "done step:24  episode:933\n",
      "done step:15  episode:934\n",
      "done step:17  episode:935\n",
      "done step:19  episode:936\n",
      "done step:15  episode:937\n",
      "done step:42  episode:938\n",
      "done step:13  episode:939\n",
      "done step:13  episode:940\n",
      "done step:15  episode:941\n",
      "done step:17  episode:942\n",
      "done step:13  episode:943\n",
      "done step:26  episode:944\n",
      "done step:15  episode:945\n",
      "done step:15  episode:946\n",
      "done step:43  episode:947\n",
      "done step:15  episode:948\n",
      "done step:28  episode:949\n",
      "done step:15  episode:950\n",
      "done step:28  episode:951\n",
      "done step:40  episode:952\n",
      "done step:13  episode:953\n",
      "done step:13  episode:954\n",
      "done step:35  episode:955\n",
      "done step:15  episode:956\n",
      "done step:40  episode:957\n",
      "done step:13  episode:958\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "done step:32  episode:959\n",
      "done step:43  episode:960\n",
      "done step:43  episode:961\n",
      "done step:38  episode:962\n",
      "done step:15  episode:963\n",
      "done step:39  episode:964\n",
      "done step:34  episode:965\n",
      "done step:35  episode:966\n",
      "done step:13  episode:968\n",
      "done step:26  episode:969\n",
      "done step:15  episode:970\n",
      "done step:17  episode:971\n",
      "done step:13  episode:972\n",
      "done step:13  episode:973\n",
      "done step:19  episode:974\n",
      "done step:15  episode:975\n",
      "done step:19  episode:976\n",
      "done step:15  episode:978\n",
      "done step:15  episode:979\n",
      "done step:15  episode:980\n",
      "done step:15  episode:981\n",
      "done step:15  episode:982\n",
      "done step:15  episode:983\n",
      "done step:15  episode:984\n",
      "done step:17  episode:985\n",
      "done step:15  episode:986\n",
      "done step:15  episode:987\n",
      "done step:15  episode:988\n",
      "done step:15  episode:989\n",
      "done step:13  episode:990\n",
      "done step:15  episode:991\n",
      "done step:15  episode:992\n",
      "done step:15  episode:993\n",
      "done step:13  episode:994\n",
      "done step:15  episode:995\n",
      "done step:15  episode:996\n",
      "done step:17  episode:997\n",
      "done step:15  episode:998\n",
      "done step:15  episode:999\n",
      "done step:17  episode:1000\n",
      "done step:35  episode:1001\n",
      "done step:15  episode:1002\n",
      "done step:15  episode:1003\n",
      "done step:15  episode:1004\n",
      "done step:13  episode:1005\n",
      "done step:13  episode:1006\n",
      "done step:13  episode:1007\n",
      "done step:13  episode:1008\n",
      "done step:15  episode:1009\n",
      "done step:13  episode:1010\n",
      "done step:15  episode:1011\n",
      "done step:13  episode:1012\n",
      "done step:13  episode:1013\n",
      "done step:15  episode:1014\n",
      "done step:17  episode:1015\n",
      "done step:13  episode:1016\n",
      "done step:13  episode:1017\n",
      "done step:15  episode:1018\n",
      "done step:13  episode:1019\n",
      "done step:13  episode:1020\n",
      "done step:15  episode:1021\n",
      "done step:13  episode:1022\n",
      "done step:13  episode:1023\n",
      "done step:15  episode:1024\n",
      "done step:13  episode:1025\n",
      "done step:13  episode:1026\n",
      "done step:13  episode:1027\n",
      "done step:13  episode:1028\n",
      "done step:17  episode:1029\n",
      "done step:13  episode:1030\n",
      "done step:13  episode:1031\n",
      "done step:15  episode:1032\n",
      "done step:13  episode:1033\n",
      "done step:13  episode:1034\n",
      "done step:11  episode:1035\n",
      "done step:15  episode:1036\n",
      "done step:15  episode:1037\n",
      "done step:13  episode:1038\n",
      "done step:15  episode:1039\n",
      "done step:15  episode:1040\n",
      "done step:15  episode:1041\n",
      "done step:13  episode:1042\n",
      "done step:15  episode:1043\n",
      "done step:13  episode:1044\n",
      "done step:15  episode:1045\n",
      "done step:35  episode:1046\n",
      "done step:15  episode:1047\n",
      "done step:15  episode:1048\n",
      "done step:15  episode:1049\n",
      "done step:15  episode:1050\n",
      "done step:13  episode:1051\n",
      "done step:26  episode:1052\n",
      "done step:26  episode:1053\n",
      "done step:13  episode:1054\n",
      "done step:13  episode:1055\n",
      "done step:15  episode:1056\n",
      "done step:13  episode:1057\n",
      "done step:13  episode:1058\n",
      "done step:15  episode:1059\n",
      "done step:13  episode:1060\n",
      "done step:13  episode:1061\n",
      "done step:15  episode:1062\n",
      "done step:15  episode:1063\n",
      "done step:15  episode:1064\n",
      "done step:13  episode:1065\n",
      "done step:28  episode:1066\n",
      "done step:13  episode:1067\n",
      "done step:13  episode:1068\n",
      "done step:15  episode:1069\n",
      "done step:15  episode:1070\n",
      "done step:15  episode:1071\n",
      "done step:15  episode:1072\n",
      "done step:13  episode:1073\n",
      "done step:13  episode:1074\n",
      "done step:13  episode:1075\n",
      "done step:15  episode:1076\n",
      "done step:13  episode:1077\n",
      "done step:15  episode:1078\n",
      "done step:15  episode:1079\n",
      "done step:13  episode:1080\n",
      "done step:13  episode:1081\n",
      "done step:13  episode:1082\n",
      "done step:13  episode:1083\n",
      "done step:13  episode:1084\n",
      "done step:15  episode:1085\n",
      "done step:13  episode:1086\n",
      "done step:28  episode:1087\n",
      "done step:15  episode:1088\n",
      "done step:13  episode:1089\n",
      "done step:13  episode:1090\n",
      "done step:13  episode:1091\n",
      "done step:13  episode:1092\n",
      "done step:28  episode:1093\n",
      "done step:13  episode:1094\n",
      "done step:15  episode:1095\n",
      "done step:13  episode:1096\n",
      "done step:15  episode:1097\n",
      "done step:15  episode:1098\n",
      "done step:13  episode:1099\n",
      "done step:15  episode:1100\n",
      "done step:15  episode:1101\n",
      "done step:39  episode:1102\n",
      "done step:15  episode:1103\n",
      "done step:15  episode:1104\n",
      "done step:15  episode:1105\n",
      "done step:13  episode:1106\n",
      "done step:13  episode:1107\n",
      "done step:15  episode:1108\n",
      "done step:13  episode:1109\n",
      "done step:15  episode:1110\n",
      "done step:15  episode:1111\n",
      "done step:13  episode:1112\n",
      "done step:15  episode:1113\n",
      "done step:15  episode:1114\n",
      "done step:15  episode:1115\n",
      "done step:13  episode:1116\n",
      "done step:13  episode:1117\n",
      "done step:15  episode:1118\n",
      "done step:13  episode:1119\n",
      "done step:15  episode:1120\n",
      "done step:15  episode:1121\n",
      "done step:13  episode:1122\n",
      "done step:15  episode:1123\n",
      "done step:13  episode:1124\n",
      "done step:13  episode:1125\n",
      "done step:13  episode:1126\n",
      "done step:15  episode:1127\n",
      "done step:13  episode:1128\n",
      "done step:13  episode:1129\n",
      "done step:13  episode:1130\n",
      "done step:13  episode:1131\n",
      "done step:13  episode:1132\n",
      "done step:13  episode:1133\n",
      "done step:13  episode:1134\n",
      "done step:13  episode:1135\n",
      "done step:13  episode:1136\n",
      "done step:13  episode:1137\n",
      "done step:13  episode:1138\n",
      "done step:13  episode:1139\n",
      "done step:13  episode:1140\n",
      "done step:13  episode:1141\n",
      "done step:13  episode:1142\n",
      "done step:13  episode:1143\n",
      "done step:13  episode:1144\n",
      "done step:42  episode:1145\n",
      "done step:13  episode:1146\n",
      "done step:13  episode:1147\n",
      "done step:13  episode:1148\n",
      "done step:13  episode:1149\n",
      "done step:13  episode:1150\n",
      "done step:13  episode:1151\n",
      "done step:15  episode:1152\n",
      "done step:13  episode:1153\n",
      "done step:13  episode:1154\n",
      "done step:13  episode:1155\n",
      "done step:13  episode:1156\n",
      "done step:13  episode:1157\n",
      "done step:15  episode:1158\n",
      "done step:13  episode:1159\n",
      "done step:13  episode:1160\n",
      "done step:15  episode:1161\n",
      "done step:13  episode:1162\n",
      "done step:13  episode:1163\n",
      "done step:15  episode:1164\n",
      "done step:13  episode:1165\n",
      "done step:13  episode:1166\n",
      "done step:13  episode:1167\n",
      "done step:13  episode:1168\n",
      "done step:43  episode:1169\n",
      "done step:13  episode:1170\n",
      "done step:13  episode:1171\n",
      "done step:15  episode:1172\n",
      "done step:13  episode:1173\n",
      "done step:13  episode:1174\n",
      "done step:13  episode:1175\n",
      "done step:13  episode:1176\n",
      "done step:13  episode:1177\n",
      "done step:13  episode:1178\n",
      "done step:13  episode:1179\n",
      "done step:46  episode:1180\n",
      "done step:39  episode:1181\n",
      "done step:15  episode:1182\n",
      "done step:13  episode:1183\n",
      "done step:39  episode:1184\n",
      "done step:13  episode:1185\n",
      "done step:13  episode:1186\n",
      "done step:13  episode:1187\n",
      "done step:13  episode:1188\n",
      "done step:13  episode:1189\n",
      "done step:13  episode:1190\n",
      "done step:13  episode:1191\n",
      "done step:13  episode:1192\n",
      "done step:13  episode:1193\n",
      "done step:13  episode:1194\n",
      "done step:41  episode:1195\n",
      "done step:40  episode:1196\n",
      "done step:15  episode:1197\n",
      "done step:15  episode:1198\n",
      "done step:38  episode:1199\n",
      "done step:13  episode:1200\n",
      "done step:13  episode:1201\n",
      "done step:13  episode:1202\n",
      "done step:13  episode:1203\n",
      "done step:13  episode:1204\n",
      "done step:13  episode:1205\n",
      "done step:13  episode:1206\n",
      "done step:41  episode:1207\n",
      "done step:13  episode:1208\n",
      "done step:35  episode:1209\n",
      "done step:42  episode:1210\n",
      "done step:13  episode:1211\n",
      "done step:13  episode:1212\n",
      "done step:13  episode:1213\n",
      "done step:15  episode:1214\n",
      "done step:13  episode:1215\n",
      "done step:13  episode:1216\n",
      "done step:15  episode:1217\n",
      "done step:13  episode:1219\n",
      "done step:15  episode:1220\n",
      "done step:44  episode:1221\n",
      "done step:15  episode:1222\n",
      "done step:13  episode:1223\n",
      "done step:38  episode:1224\n",
      "done step:13  episode:1225\n",
      "done step:42  episode:1226\n",
      "done step:15  episode:1227\n",
      "done step:13  episode:1228\n",
      "done step:18  episode:1229\n",
      "done step:13  episode:1232\n",
      "done step:41  episode:1233\n",
      "done step:13  episode:1234\n",
      "done step:41  episode:1235\n",
      "done step:13  episode:1236\n",
      "done step:39  episode:1237\n",
      "done step:41  episode:1238\n",
      "done step:13  episode:1239\n",
      "done step:37  episode:1240\n",
      "done step:35  episode:1241\n",
      "done step:39  episode:1242\n",
      "done step:36  episode:1243\n",
      "done step:37  episode:1244\n",
      "done step:27  episode:1245\n",
      "done step:39  episode:1246\n",
      "done step:40  episode:1247\n",
      "done step:37  episode:1248\n",
      "done step:15  episode:1249\n",
      "done step:34  episode:1250\n",
      "done step:37  episode:1251\n",
      "done step:37  episode:1252\n",
      "done step:39  episode:1253\n",
      "done step:48  episode:1254\n",
      "done step:40  episode:1255\n",
      "done step:48  episode:1256\n",
      "done step:39  episode:1257\n",
      "done step:36  episode:1258\n",
      "done step:37  episode:1259\n",
      "done step:47  episode:1260\n",
      "done step:41  episode:1261\n",
      "done step:37  episode:1263\n",
      "done step:41  episode:1264\n",
      "done step:25  episode:1265\n",
      "done step:35  episode:1266\n",
      "done step:39  episode:1267\n",
      "done step:19  episode:1268\n",
      "done step:30  episode:1269\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "done step:35  episode:1270\n",
      "done step:37  episode:1271\n",
      "done step:35  episode:1273\n",
      "done step:21  episode:1274\n",
      "done step:23  episode:1275\n",
      "done step:21  episode:1276\n",
      "done step:21  episode:1277\n",
      "done step:21  episode:1278\n",
      "done step:29  episode:1279\n",
      "done step:21  episode:1280\n",
      "done step:42  episode:1282\n",
      "done step:49  episode:1283\n",
      "done step:32  episode:1284\n",
      "done step:39  episode:1286\n",
      "done step:31  episode:1287\n",
      "done step:23  episode:1288\n",
      "done step:47  episode:1289\n",
      "done step:27  episode:1290\n",
      "done step:25  episode:1291\n",
      "done step:29  episode:1292\n",
      "done step:244  episode:1293\n",
      "done step:23  episode:1294\n",
      "done step:29  episode:1295\n",
      "done step:31  episode:1296\n",
      "done step:33  episode:1297\n",
      "done step:25  episode:1298\n",
      "done step:23  episode:1299\n",
      "done step:29  episode:1300\n",
      "done step:32  episode:1301\n",
      "done step:33  episode:1302\n",
      "done step:43  episode:1303\n",
      "done step:23  episode:1304\n",
      "done step:29  episode:1305\n",
      "done step:25  episode:1306\n",
      "done step:29  episode:1307\n",
      "done step:43  episode:1308\n",
      "done step:40  episode:1309\n",
      "done step:27  episode:1311\n",
      "done step:31  episode:1312\n",
      "done step:40  episode:1313\n",
      "done step:29  episode:1314\n",
      "done step:27  episode:1315\n",
      "done step:42  episode:1316\n",
      "done step:29  episode:1318\n",
      "done step:42  episode:1319\n",
      "done step:24  episode:1320\n",
      "done step:33  episode:1321\n",
      "done step:39  episode:1322\n",
      "done step:39  episode:1323\n",
      "done step:43  episode:1324\n",
      "done step:45  episode:1325\n",
      "done step:38  episode:1326\n",
      "done step:15  episode:1327\n",
      "done step:38  episode:1328\n",
      "done step:37  episode:1330\n",
      "done step:15  episode:1331\n",
      "done step:29  episode:1332\n",
      "done step:25  episode:1333\n",
      "done step:23  episode:1334\n",
      "done step:40  episode:1335\n",
      "done step:23  episode:1336\n",
      "done step:27  episode:1337\n",
      "done step:29  episode:1338\n",
      "done step:31  episode:1339\n",
      "done step:37  episode:1340\n",
      "done step:35  episode:1341\n",
      "done step:36  episode:1342\n",
      "done step:29  episode:1343\n",
      "done step:44  episode:1344\n",
      "done step:23  episode:1345\n",
      "done step:23  episode:1346\n",
      "done step:36  episode:1347\n",
      "done step:34  episode:1348\n",
      "done step:29  episode:1349\n",
      "done step:33  episode:1350\n",
      "done step:21  episode:1351\n",
      "done step:23  episode:1352\n",
      "done step:23  episode:1353\n",
      "done step:29  episode:1354\n",
      "done step:23  episode:1355\n",
      "done step:21  episode:1356\n",
      "done step:15  episode:1357\n",
      "done step:23  episode:1358\n",
      "done step:27  episode:1359\n",
      "done step:25  episode:1360\n",
      "done step:45  episode:1362\n",
      "done step:29  episode:1363\n",
      "done step:41  episode:1364\n",
      "done step:37  episode:1365\n",
      "done step:35  episode:1366\n",
      "done step:45  episode:1367\n",
      "done step:38  episode:1368\n",
      "done step:29  episode:1369\n",
      "done step:40  episode:1370\n",
      "done step:40  episode:1371\n",
      "done step:43  episode:1372\n",
      "done step:43  episode:1373\n",
      "done step:28  episode:1374\n",
      "done step:30  episode:1375\n",
      "done step:30  episode:1376\n",
      "done step:28  episode:1377\n",
      "done step:39  episode:1378\n",
      "done step:44  episode:1379\n",
      "done step:39  episode:1381\n",
      "done step:37  episode:1383\n",
      "done step:39  episode:1384\n",
      "done step:15  episode:1385\n",
      "done step:43  episode:1386\n",
      "done step:23  episode:1387\n",
      "done step:35  episode:1388\n",
      "done step:40  episode:1389\n",
      "done step:21  episode:1390\n",
      "done step:29  episode:1391\n",
      "done step:22  episode:1392\n",
      "done step:27  episode:1393\n",
      "done step:26  episode:1394\n",
      "done step:33  episode:1395\n",
      "done step:31  episode:1396\n",
      "done step:35  episode:1397\n",
      "done step:45  episode:1398\n",
      "done step:23  episode:1399\n",
      "done step:23  episode:1400\n",
      "done step:45  episode:1401\n",
      "done step:29  episode:1403\n",
      "done step:26  episode:1404\n",
      "done step:40  episode:1405\n",
      "done step:38  episode:1406\n",
      "done step:39  episode:1407\n",
      "done step:27  episode:1408\n",
      "done step:37  episode:1409\n",
      "done step:35  episode:1410\n",
      "done step:33  episode:1411\n",
      "done step:43  episode:1412\n",
      "done step:40  episode:1413\n",
      "done step:35  episode:1414\n",
      "done step:26  episode:1415\n",
      "done step:30  episode:1416\n",
      "done step:36  episode:1417\n",
      "done step:37  episode:1418\n",
      "done step:31  episode:1419\n",
      "done step:30  episode:1420\n",
      "done step:31  episode:1421\n",
      "done step:11  episode:1422\n",
      "done step:35  episode:1423\n",
      "done step:40  episode:1424\n",
      "done step:33  episode:1425\n",
      "done step:34  episode:1426\n",
      "done step:11  episode:1427\n",
      "done step:17  episode:1428\n",
      "done step:11  episode:1429\n",
      "done step:13  episode:1430\n",
      "done step:11  episode:1431\n",
      "done step:11  episode:1432\n",
      "done step:36  episode:1433\n",
      "done step:46  episode:1434\n",
      "done step:13  episode:1435\n",
      "done step:39  episode:1436\n",
      "done step:36  episode:1437\n",
      "done step:38  episode:1438\n",
      "done step:36  episode:1439\n",
      "done step:36  episode:1440\n",
      "done step:37  episode:1441\n",
      "done step:27  episode:1442\n",
      "done step:28  episode:1443\n",
      "done step:43  episode:1445\n",
      "done step:28  episode:1446\n",
      "done step:48  episode:1447\n",
      "done step:45  episode:1449\n",
      "done step:39  episode:1450\n",
      "done step:45  episode:1451\n",
      "done step:22  episode:1452\n",
      "done step:22  episode:1453\n",
      "done step:22  episode:1454\n",
      "done step:39  episode:1455\n",
      "done step:36  episode:1456\n",
      "done step:37  episode:1457\n",
      "done step:43  episode:1458\n",
      "done step:26  episode:1459\n",
      "done step:42  episode:1460\n",
      "done step:17  episode:1461\n",
      "done step:22  episode:1462\n",
      "done step:36  episode:1463\n",
      "done step:45  episode:1464\n",
      "done step:36  episode:1465\n",
      "done step:39  episode:1466\n",
      "done step:25  episode:1467\n",
      "done step:39  episode:1468\n",
      "done step:39  episode:1469\n",
      "done step:37  episode:1470\n",
      "done step:34  episode:1471\n",
      "done step:32  episode:1472\n",
      "done step:37  episode:1473\n",
      "done step:34  episode:1474\n",
      "done step:36  episode:1475\n",
      "done step:38  episode:1476\n",
      "done step:39  episode:1477\n",
      "done step:42  episode:1478\n",
      "done step:39  episode:1479\n",
      "done step:31  episode:1480\n",
      "done step:33  episode:1481\n",
      "done step:39  episode:1482\n",
      "done step:35  episode:1483\n",
      "done step:39  episode:1484\n",
      "done step:39  episode:1485\n",
      "done step:22  episode:1486\n",
      "done step:29  episode:1487\n",
      "done step:34  episode:1488\n",
      "done step:24  episode:1489\n",
      "done step:38  episode:1490\n",
      "done step:24  episode:1491\n",
      "done step:39  episode:1492\n",
      "done step:36  episode:1493\n",
      "done step:36  episode:1494\n",
      "done step:35  episode:1495\n",
      "done step:39  episode:1496\n",
      "done step:36  episode:1497\n",
      "done step:36  episode:1498\n",
      "done step:36  episode:1499\n",
      "done step:34  episode:1500\n",
      "done step:41  episode:1501\n",
      "done step:39  episode:1502\n",
      "done step:39  episode:1503\n",
      "done step:45  episode:1505\n",
      "done step:130  episode:1506\n",
      "done step:39  episode:1507\n",
      "done step:24  episode:1508\n",
      "done step:39  episode:1509\n",
      "done step:36  episode:1510\n",
      "done step:41  episode:1511\n",
      "done step:42  episode:1512\n",
      "done step:39  episode:1513\n",
      "done step:43  episode:1514\n",
      "done step:35  episode:1515\n",
      "done step:40  episode:1516\n",
      "done step:39  episode:1517\n",
      "done step:37  episode:1518\n",
      "done step:44  episode:1519\n",
      "done step:28  episode:1520\n",
      "done step:43  episode:1521\n",
      "done step:40  episode:1522\n",
      "done step:38  episode:1523\n",
      "done step:45  episode:1524\n",
      "done step:49  episode:1525\n",
      "done step:29  episode:1526\n",
      "done step:41  episode:1527\n",
      "done step:23  episode:1528\n",
      "done step:39  episode:1529\n",
      "done step:42  episode:1530\n",
      "done step:26  episode:1531\n",
      "done step:37  episode:1532\n",
      "done step:45  episode:1533\n",
      "done step:42  episode:1534\n",
      "done step:30  episode:1535\n",
      "done step:37  episode:1536\n",
      "done step:48  episode:1537\n",
      "done step:26  episode:1538\n",
      "done step:25  episode:1539\n",
      "done step:29  episode:1540\n",
      "done step:43  episode:1541\n",
      "done step:47  episode:1542\n",
      "done step:34  episode:1543\n",
      "done step:37  episode:1544\n",
      "done step:17  episode:1545\n",
      "done step:34  episode:1546\n",
      "done step:48  episode:1547\n",
      "done step:23  episode:1548\n",
      "done step:40  episode:1549\n",
      "done step:42  episode:1550\n",
      "done step:37  episode:1551\n",
      "done step:15  episode:1552\n",
      "done step:15  episode:1553\n",
      "done step:39  episode:1554\n",
      "done step:48  episode:1555\n",
      "done step:41  episode:1556\n",
      "done step:39  episode:1557\n",
      "done step:31  episode:1558\n",
      "done step:30  episode:1559\n",
      "done step:40  episode:1560\n",
      "done step:40  episode:1561\n",
      "done step:15  episode:1562\n",
      "done step:33  episode:1563\n",
      "done step:39  episode:1564\n",
      "done step:34  episode:1565\n",
      "done step:32  episode:1566\n",
      "done step:31  episode:1567\n",
      "done step:31  episode:1568\n",
      "done step:17  episode:1569\n",
      "done step:31  episode:1570\n",
      "done step:37  episode:1571\n",
      "done step:19  episode:1572\n",
      "done step:19  episode:1573\n",
      "done step:36  episode:1574\n",
      "done step:29  episode:1575\n",
      "done step:31  episode:1577\n",
      "done step:33  episode:1578\n",
      "done step:31  episode:1579\n",
      "done step:41  episode:1580\n",
      "done step:35  episode:1581\n",
      "done step:36  episode:1582\n",
      "done step:39  episode:1583\n",
      "done step:36  episode:1584\n",
      "done step:41  episode:1585\n",
      "done step:31  episode:1586\n",
      "done step:34  episode:1587\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "done step:44  episode:1589\n",
      "done step:34  episode:1590\n",
      "done step:34  episode:1591\n",
      "done step:19  episode:1592\n",
      "done step:30  episode:1593\n",
      "done step:41  episode:1594\n",
      "done step:37  episode:1595\n",
      "done step:27  episode:1596\n",
      "done step:27  episode:1597\n",
      "done step:41  episode:1598\n",
      "done step:26  episode:1600\n",
      "done step:30  episode:1601\n",
      "done step:38  episode:1602\n",
      "done step:41  episode:1603\n",
      "done step:46  episode:1604\n",
      "done step:43  episode:1605\n",
      "done step:44  episode:1606\n",
      "done step:42  episode:1607\n",
      "done step:49  episode:1608\n",
      "done step:32  episode:1609\n",
      "done step:41  episode:1610\n",
      "done step:39  episode:1611\n",
      "done step:34  episode:1612\n",
      "done step:45  episode:1613\n",
      "done step:18  episode:1614\n",
      "done step:36  episode:1615\n",
      "done step:48  episode:1616\n",
      "done step:37  episode:1617\n",
      "done step:37  episode:1618\n",
      "done step:39  episode:1619\n",
      "done step:31  episode:1621\n",
      "done step:42  episode:1622\n",
      "done step:35  episode:1623\n",
      "done step:35  episode:1625\n",
      "done step:31  episode:1626\n",
      "done step:26  episode:1627\n",
      "done step:35  episode:1628\n",
      "done step:29  episode:1629\n",
      "done step:24  episode:1630\n",
      "done step:33  episode:1631\n",
      "done step:47  episode:1632\n",
      "done step:44  episode:1634\n",
      "done step:48  episode:1635\n",
      "done step:36  episode:1636\n",
      "done step:35  episode:1637\n",
      "done step:48  episode:1638\n",
      "done step:41  episode:1639\n",
      "done step:19  episode:1641\n",
      "done step:28  episode:1642\n",
      "done step:30  episode:1643\n",
      "done step:44  episode:1644\n",
      "done step:30  episode:1645\n",
      "done step:35  episode:1646\n",
      "done step:31  episode:1647\n",
      "done step:28  episode:1648\n",
      "done step:43  episode:1649\n",
      "done step:24  episode:1650\n",
      "done step:48  episode:1652\n",
      "done step:39  episode:1653\n",
      "done step:34  episode:1654\n",
      "done step:41  episode:1656\n",
      "done step:21  episode:1658\n",
      "done step:28  episode:1659\n",
      "done step:43  episode:1660\n",
      "done step:24  episode:1661\n",
      "done step:37  episode:1662\n",
      "done step:33  episode:1663\n",
      "done step:45  episode:1664\n",
      "done step:35  episode:1665\n",
      "done step:22  episode:1666\n",
      "done step:49  episode:1667\n",
      "done step:28  episode:1668\n",
      "done step:22  episode:1669\n",
      "done step:30  episode:1670\n",
      "done step:21  episode:1671\n",
      "done step:39  episode:1672\n",
      "done step:36  episode:1673\n",
      "done step:36  episode:1674\n",
      "done step:41  episode:1675\n",
      "done step:48  episode:1676\n",
      "done step:44  episode:1677\n",
      "done step:36  episode:1678\n",
      "done step:41  episode:1679\n",
      "done step:46  episode:1680\n",
      "done step:38  episode:1681\n",
      "done step:30  episode:1683\n",
      "done step:41  episode:1684\n",
      "done step:46  episode:1685\n",
      "done step:47  episode:1686\n",
      "done step:36  episode:1687\n",
      "done step:24  episode:1689\n",
      "done step:45  episode:1690\n",
      "done step:45  episode:1691\n",
      "done step:30  episode:1692\n",
      "done step:43  episode:1693\n",
      "done step:24  episode:1695\n",
      "done step:35  episode:1696\n",
      "done step:28  episode:1697\n",
      "done step:242  episode:1699\n",
      "done step:33  episode:1700\n",
      "done step:47  episode:1701\n",
      "done step:40  episode:1702\n",
      "done step:32  episode:1703\n",
      "done step:38  episode:1704\n",
      "done step:35  episode:1705\n",
      "done step:39  episode:1706\n",
      "done step:47  episode:1707\n",
      "done step:36  episode:1708\n",
      "done step:44  episode:1709\n",
      "done step:43  episode:1710\n",
      "done step:40  episode:1711\n",
      "done step:46  episode:1712\n",
      "done step:31  episode:1713\n",
      "done step:28  episode:1714\n",
      "done step:43  episode:1715\n",
      "done step:47  episode:1716\n",
      "done step:33  episode:1718\n",
      "done step:43  episode:1719\n",
      "done step:38  episode:1720\n",
      "done step:25  episode:1721\n",
      "done step:41  episode:1722\n",
      "done step:36  episode:1723\n",
      "done step:30  episode:1724\n",
      "done step:27  episode:1725\n",
      "done step:21  episode:1726\n",
      "done step:43  episode:1727\n",
      "done step:30  episode:1728\n",
      "done step:42  episode:1729\n",
      "done step:35  episode:1730\n",
      "done step:41  episode:1731\n",
      "done step:29  episode:1732\n",
      "done step:41  episode:1733\n",
      "done step:26  episode:1734\n",
      "done step:43  episode:1735\n",
      "done step:21  episode:1736\n",
      "done step:27  episode:1737\n",
      "done step:43  episode:1739\n",
      "done step:33  episode:1740\n",
      "done step:32  episode:1741\n",
      "done step:43  episode:1742\n",
      "done step:34  episode:1743\n",
      "done step:36  episode:1744\n",
      "done step:38  episode:1745\n",
      "done step:35  episode:1746\n",
      "done step:37  episode:1747\n",
      "done step:30  episode:1749\n",
      "done step:31  episode:1750\n",
      "done step:24  episode:1751\n",
      "done step:31  episode:1752\n",
      "done step:28  episode:1753\n",
      "done step:33  episode:1754\n",
      "done step:41  episode:1755\n",
      "done step:42  episode:1756\n",
      "done step:43  episode:1757\n",
      "done step:25  episode:1758\n",
      "done step:23  episode:1759\n",
      "done step:38  episode:1760\n",
      "done step:29  episode:1761\n",
      "done step:43  episode:1762\n",
      "done step:27  episode:1763\n",
      "done step:31  episode:1764\n",
      "done step:21  episode:1765\n",
      "done step:23  episode:1766\n",
      "done step:25  episode:1767\n",
      "done step:29  episode:1768\n",
      "done step:23  episode:1769\n",
      "done step:30  episode:1770\n",
      "done step:30  episode:1771\n",
      "done step:19  episode:1772\n",
      "done step:32  episode:1773\n",
      "done step:27  episode:1774\n",
      "done step:25  episode:1775\n",
      "done step:21  episode:1776\n",
      "done step:32  episode:1777\n",
      "done step:21  episode:1778\n",
      "done step:23  episode:1779\n",
      "done step:25  episode:1780\n",
      "done step:27  episode:1781\n",
      "done step:27  episode:1782\n",
      "done step:19  episode:1783\n",
      "done step:28  episode:1784\n",
      "done step:23  episode:1785\n",
      "done step:27  episode:1786\n",
      "done step:29  episode:1787\n",
      "done step:25  episode:1788\n",
      "done step:25  episode:1789\n",
      "done step:36  episode:1790\n",
      "done step:23  episode:1791\n",
      "done step:23  episode:1792\n",
      "done step:19  episode:1793\n",
      "done step:23  episode:1794\n",
      "done step:19  episode:1795\n",
      "done step:21  episode:1796\n",
      "done step:28  episode:1797\n",
      "done step:39  episode:1798\n",
      "done step:35  episode:1799\n",
      "done step:23  episode:1800\n",
      "done step:28  episode:1801\n",
      "done step:36  episode:1802\n",
      "done step:28  episode:1803\n",
      "done step:29  episode:1804\n",
      "done step:39  episode:1806\n",
      "done step:23  episode:1807\n",
      "done step:25  episode:1808\n",
      "done step:35  episode:1809\n",
      "done step:28  episode:1810\n",
      "done step:25  episode:1811\n",
      "done step:27  episode:1812\n",
      "done step:33  episode:1813\n",
      "done step:39  episode:1814\n",
      "done step:36  episode:1815\n",
      "done step:28  episode:1816\n",
      "done step:30  episode:1817\n",
      "done step:39  episode:1818\n",
      "done step:37  episode:1819\n",
      "done step:31  episode:1820\n",
      "done step:35  episode:1821\n",
      "done step:25  episode:1822\n",
      "done step:43  episode:1823\n",
      "done step:39  episode:1824\n",
      "done step:36  episode:1825\n",
      "done step:35  episode:1826\n",
      "done step:33  episode:1827\n",
      "done step:36  episode:1828\n",
      "done step:33  episode:1829\n",
      "done step:35  episode:1830\n",
      "done step:36  episode:1831\n",
      "done step:35  episode:1833\n",
      "done step:46  episode:1837\n",
      "done step:42  episode:1838\n",
      "done step:36  episode:1840\n",
      "done step:29  episode:1841\n",
      "done step:33  episode:1842\n",
      "done step:37  episode:1843\n",
      "done step:27  episode:1844\n",
      "done step:44  episode:1845\n",
      "done step:26  episode:1846\n",
      "done step:40  episode:1847\n",
      "done step:31  episode:1848\n",
      "done step:32  episode:1849\n",
      "done step:28  episode:1850\n",
      "done step:34  episode:1851\n",
      "done step:33  episode:1852\n",
      "done step:27  episode:1853\n",
      "done step:41  episode:1854\n",
      "done step:33  episode:1855\n",
      "done step:31  episode:1856\n",
      "done step:32  episode:1857\n",
      "done step:31  episode:1858\n",
      "done step:39  episode:1859\n",
      "done step:43  episode:1860\n",
      "done step:39  episode:1861\n",
      "done step:39  episode:1862\n",
      "done step:30  episode:1864\n",
      "done step:35  episode:1865\n",
      "done step:25  episode:1866\n",
      "done step:32  episode:1868\n"
     ]
    },
    {
     "ename": "KeyboardInterrupt",
     "evalue": "",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mKeyboardInterrupt\u001b[0m                         Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-10-263240bbee7e>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mmain\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[1;32m<ipython-input-7-5c01849179d0>\u001b[0m in \u001b[0;36mmain\u001b[1;34m()\u001b[0m\n\u001b[0;32m     32\u001b[0m             \u001b[1;31m# 定义奖励\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     33\u001b[0m             \u001b[0mreward_agent\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mreward\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 34\u001b[1;33m             \u001b[0magent\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mperceive\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mstate\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0maction_1d\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mreward\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mnext_state\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdone\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m     35\u001b[0m             \u001b[0mstate\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mnext_state\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     36\u001b[0m             \u001b[1;31m# 判断这一步走了每    没走说明这一步是非法的，发生了碰撞，立即结束当前棋局，重开一局\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32m<ipython-input-4-31ce8f40cec7>\u001b[0m in \u001b[0;36mperceive\u001b[1;34m(self, state, action, reward, next_state, done)\u001b[0m\n\u001b[0;32m     86\u001b[0m         \u001b[1;31m# 一个batch够了\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     87\u001b[0m         \u001b[1;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mreplay_buffer\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m>\u001b[0m \u001b[0mBATCH_SIZE\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 88\u001b[1;33m             \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtrain_Q_network\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m     89\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     90\u001b[0m     \u001b[1;32mdef\u001b[0m \u001b[0mmodify_last_reward\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mnew_reward\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32m<ipython-input-4-31ce8f40cec7>\u001b[0m in \u001b[0;36mtrain_Q_network\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m    115\u001b[0m         \u001b[1;31m# Q_value_batch = self.sess.run(self.Q_value, feed_dict={\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    116\u001b[0m         \u001b[1;31m#                               self.state_input: next_state_batch})\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 117\u001b[1;33m         Q_value_batch = self.sess.run(self.targetQ_value, feed_dict={\n\u001b[0m\u001b[0;32m    118\u001b[0m                                       self.state_input: next_state_batch})\n\u001b[0;32m    119\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mD:\\anaconda3\\lib\\site-packages\\tensorflow\\python\\client\\session.py\u001b[0m in \u001b[0;36mrun\u001b[1;34m(self, fetches, feed_dict, options, run_metadata)\u001b[0m\n\u001b[0;32m    955\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    956\u001b[0m     \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 957\u001b[1;33m       result = self._run(None, fetches, feed_dict, options_ptr,\n\u001b[0m\u001b[0;32m    958\u001b[0m                          run_metadata_ptr)\n\u001b[0;32m    959\u001b[0m       \u001b[1;32mif\u001b[0m \u001b[0mrun_metadata\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mD:\\anaconda3\\lib\\site-packages\\tensorflow\\python\\client\\session.py\u001b[0m in \u001b[0;36m_run\u001b[1;34m(self, handle, fetches, feed_dict, options, run_metadata)\u001b[0m\n\u001b[0;32m   1178\u001b[0m     \u001b[1;31m# or if the call is a partial run that specifies feeds.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1179\u001b[0m     \u001b[1;32mif\u001b[0m \u001b[0mfinal_fetches\u001b[0m \u001b[1;32mor\u001b[0m \u001b[0mfinal_targets\u001b[0m \u001b[1;32mor\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mhandle\u001b[0m \u001b[1;32mand\u001b[0m \u001b[0mfeed_dict_tensor\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1180\u001b[1;33m       results = self._do_run(handle, final_targets, final_fetches,\n\u001b[0m\u001b[0;32m   1181\u001b[0m                              feed_dict_tensor, options, run_metadata)\n\u001b[0;32m   1182\u001b[0m     \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mD:\\anaconda3\\lib\\site-packages\\tensorflow\\python\\client\\session.py\u001b[0m in \u001b[0;36m_do_run\u001b[1;34m(self, handle, target_list, fetch_list, feed_dict, options, run_metadata)\u001b[0m\n\u001b[0;32m   1356\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1357\u001b[0m     \u001b[1;32mif\u001b[0m \u001b[0mhandle\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1358\u001b[1;33m       return self._do_call(_run_fn, feeds, fetches, targets, options,\n\u001b[0m\u001b[0;32m   1359\u001b[0m                            run_metadata)\n\u001b[0;32m   1360\u001b[0m     \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mD:\\anaconda3\\lib\\site-packages\\tensorflow\\python\\client\\session.py\u001b[0m in \u001b[0;36m_do_call\u001b[1;34m(self, fn, *args)\u001b[0m\n\u001b[0;32m   1363\u001b[0m   \u001b[1;32mdef\u001b[0m \u001b[0m_do_call\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfn\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1364\u001b[0m     \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1365\u001b[1;33m       \u001b[1;32mreturn\u001b[0m \u001b[0mfn\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m   1366\u001b[0m     \u001b[1;32mexcept\u001b[0m \u001b[0merrors\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mOpError\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1367\u001b[0m       \u001b[0mmessage\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mcompat\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mas_text\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0me\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmessage\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mD:\\anaconda3\\lib\\site-packages\\tensorflow\\python\\client\\session.py\u001b[0m in \u001b[0;36m_run_fn\u001b[1;34m(feed_dict, fetch_list, target_list, options, run_metadata)\u001b[0m\n\u001b[0;32m   1347\u001b[0m       \u001b[1;31m# Ensure any changes to the graph are reflected in the runtime.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1348\u001b[0m       \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_extend_graph\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1349\u001b[1;33m       return self._call_tf_sessionrun(options, feed_dict, fetch_list,\n\u001b[0m\u001b[0;32m   1350\u001b[0m                                       target_list, run_metadata)\n\u001b[0;32m   1351\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mD:\\anaconda3\\lib\\site-packages\\tensorflow\\python\\client\\session.py\u001b[0m in \u001b[0;36m_call_tf_sessionrun\u001b[1;34m(self, options, feed_dict, fetch_list, target_list, run_metadata)\u001b[0m\n\u001b[0;32m   1439\u001b[0m   def _call_tf_sessionrun(self, options, feed_dict, fetch_list, target_list,\n\u001b[0;32m   1440\u001b[0m                           run_metadata):\n\u001b[1;32m-> 1441\u001b[1;33m     return tf_session.TF_SessionRun_wrapper(self._session, options, feed_dict,\n\u001b[0m\u001b[0;32m   1442\u001b[0m                                             \u001b[0mfetch_list\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtarget_list\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1443\u001b[0m                                             run_metadata)\n",
      "\u001b[1;31mKeyboardInterrupt\u001b[0m: "
     ]
    }
   ],
   "source": [
    "main()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1921\n",
      "    0  1  2  3  4  5  6\n",
      " 0  -  -  *  -  -  -  -\n",
      " 1  -  -  -  -  -  -  -\n",
      " 2  -  -  -  -  -  -  -\n",
      " 3  -  -  -  -  -  -  -\n",
      " 4  -  -  -  -  -  -  -\n",
      " 5  -  -  -  -  -  -  -\n",
      " 6  -  -  -  -  -  -  -\n",
      " BLACK 0   2\n",
      "\n",
      "    0  1  2  3  4  5  6\n",
      " 0  -  -  *  -  -  -  -\n",
      " 1  -  -  -  -  -  -  -\n",
      " 2  -  -  -  -  -  -  -\n",
      " 3  -  -  -  o  -  -  -\n",
      " 4  -  -  -  -  -  -  -\n",
      " 5  -  -  -  -  -  -  -\n",
      " 6  -  -  -  -  -  -  -\n",
      " WHITE 3   3\n",
      "\n",
      "    0  1  2  3  4  5  6\n",
      " 0  -  -  *  -  -  -  -\n",
      " 1  -  -  *  -  -  -  -\n",
      " 2  -  -  -  -  -  -  -\n",
      " 3  -  -  -  o  -  -  -\n",
      " 4  -  -  -  -  -  -  -\n",
      " 5  -  -  -  -  -  -  -\n",
      " 6  -  -  -  -  -  -  -\n",
      " BLACK 1   2\n",
      "\n",
      "    0  1  2  3  4  5  6\n",
      " 0  -  -  *  -  -  -  -\n",
      " 1  -  -  *  -  -  -  -\n",
      " 2  -  -  -  -  -  -  -\n",
      " 3  -  o  -  o  -  -  -\n",
      " 4  -  -  -  -  -  -  -\n",
      " 5  -  -  -  -  -  -  -\n",
      " 6  -  -  -  -  -  -  -\n",
      " WHITE 3   1\n",
      "\n",
      "    0  1  2  3  4  5  6\n",
      " 0  -  -  *  -  -  -  -\n",
      " 1  -  -  *  -  -  -  -\n",
      " 2  -  -  -  -  -  -  -\n",
      " 3  -  o  -  o  -  -  -\n",
      " 4  *  -  -  -  -  -  -\n",
      " 5  -  -  -  -  -  -  -\n",
      " 6  -  -  -  -  -  -  -\n",
      " BLACK 4   0\n",
      "\n",
      "    0  1  2  3  4  5  6\n",
      " 0  -  -  *  -  -  -  -\n",
      " 1  -  -  *  -  -  -  -\n",
      " 2  -  -  -  -  -  -  -\n",
      " 3  -  o  -  o  -  o  -\n",
      " 4  *  -  -  -  -  -  -\n",
      " 5  -  -  -  -  -  -  -\n",
      " 6  -  -  -  -  -  -  -\n",
      " WHITE 3   5\n",
      "\n",
      "    0  1  2  3  4  5  6\n",
      " 0  -  -  *  -  -  -  -\n",
      " 1  -  -  *  -  -  -  -\n",
      " 2  -  *  -  -  -  -  -\n",
      " 3  -  o  -  o  -  o  -\n",
      " 4  *  -  -  -  -  -  -\n",
      " 5  -  -  -  -  -  -  -\n",
      " 6  -  -  -  -  -  -  -\n",
      " BLACK 2   1\n",
      "\n",
      "    0  1  2  3  4  5  6\n",
      " 0  -  -  *  -  -  -  -\n",
      " 1  -  -  *  -  -  -  -\n",
      " 2  -  *  -  -  -  -  o\n",
      " 3  -  o  -  o  -  o  -\n",
      " 4  *  -  -  -  -  -  -\n",
      " 5  -  -  -  -  -  -  -\n",
      " 6  -  -  -  -  -  -  -\n",
      " WHITE 2   6\n",
      "\n",
      "    0  1  2  3  4  5  6\n",
      " 0  -  -  *  -  -  -  -\n",
      " 1  -  -  *  -  -  -  -\n",
      " 2  -  *  -  -  -  -  o\n",
      " 3  -  o  -  o  -  o  -\n",
      " 4  *  -  -  -  -  -  -\n",
      " 5  -  -  -  -  -  -  -\n",
      " 6  -  -  -  *  -  -  -\n",
      " BLACK 6   3\n",
      "\n",
      "    0  1  2  3  4  5  6\n",
      " 0  -  -  *  -  -  -  -\n",
      " 1  -  -  *  -  -  -  -\n",
      " 2  -  *  -  -  -  -  o\n",
      " 3  -  o  -  o  -  o  -\n",
      " 4  *  -  -  -  o  -  -\n",
      " 5  -  -  -  -  -  -  -\n",
      " 6  -  -  -  *  -  -  -\n",
      " WHITE 4   4\n",
      "\n",
      "    0  1  2  3  4  5  6\n",
      " 0  -  -  *  -  -  -  -\n",
      " 1  -  -  *  *  -  -  -\n",
      " 2  -  *  -  -  -  -  o\n",
      " 3  -  o  -  o  -  o  -\n",
      " 4  *  -  -  -  o  -  -\n",
      " 5  -  -  -  -  -  -  -\n",
      " 6  -  -  -  *  -  -  -\n",
      " BLACK 1   3\n",
      "\n",
      "    0  1  2  3  4  5  6\n",
      " 0  -  -  *  -  -  -  -\n",
      " 1  -  -  *  *  -  -  -\n",
      " 2  -  *  -  -  -  -  o\n",
      " 3  -  o  -  o  -  o  -\n",
      " 4  *  -  -  -  o  -  -\n",
      " 5  -  -  -  -  -  -  -\n",
      " 6  -  -  -  *  -  o  -\n",
      " WHITE 6   5\n",
      "\n",
      "    0  1  2  3  4  5  6\n",
      " 0  -  -  *  -  -  -  -\n",
      " 1  -  -  *  *  -  -  -\n",
      " 2  -  *  -  -  -  -  o\n",
      " 3  -  o  -  o  -  o  -\n",
      " 4  *  -  -  -  o  -  -\n",
      " 5  -  -  -  -  -  -  -\n",
      " 6  -  -  *  *  -  o  -\n",
      " BLACK 6   2\n",
      "\n",
      "    0  1  2  3  4  5  6\n",
      " 0  -  -  *  -  -  -  o\n",
      " 1  -  -  *  *  -  -  -\n",
      " 2  -  *  -  -  -  -  o\n",
      " 3  -  o  -  o  -  o  -\n",
      " 4  *  -  -  -  o  -  -\n",
      " 5  -  -  -  -  -  -  -\n",
      " 6  -  -  *  *  -  o  -\n",
      " WHITE 0   6\n",
      "\n",
      "    0  1  2  3  4  5  6\n",
      " 0  -  -  *  -  -  -  o\n",
      " 1  -  -  *  *  -  -  -\n",
      " 2  -  *  -  -  -  -  o\n",
      " 3  -  o  -  o  -  o  -\n",
      " 4  *  -  -  -  o  -  -\n",
      " 5  -  -  -  -  -  -  -\n",
      " 6  -  -  *  *  *  o  -\n",
      " BLACK 6   4\n",
      "\n",
      "    0  1  2  3  4  5  6\n",
      " 0  -  -  *  -  -  -  o\n",
      " 1  -  -  *  *  -  -  -\n",
      " 2  o  *  -  -  -  -  o\n",
      " 3  -  o  -  o  -  o  -\n",
      " 4  *  -  -  -  o  -  -\n",
      " 5  -  -  -  -  -  -  -\n",
      " 6  -  -  *  *  *  o  -\n",
      " WHITE 2   0\n",
      "\n",
      "    0  1  2  3  4  5  6\n",
      " 0  -  -  *  -  -  -  o\n",
      " 1  -  -  *  *  -  -  -\n",
      " 2  o  *  -  -  -  -  o\n",
      " 3  -  o  -  o  -  o  -\n",
      " 4  *  -  -  -  o  *  -\n",
      " 5  -  -  -  -  -  -  -\n",
      " 6  -  -  *  *  *  o  -\n",
      " BLACK 4   5\n",
      "\n",
      "    0  1  2  3  4  5  6\n",
      " 0  -  -  *  -  -  -  o\n",
      " 1  -  -  *  *  -  -  -\n",
      " 2  o  *  -  o  -  -  o\n",
      " 3  -  o  -  o  -  o  -\n",
      " 4  *  -  -  -  o  *  -\n",
      " 5  -  -  -  -  -  -  -\n",
      " 6  -  -  *  *  *  o  -\n",
      " WHITE 2   3\n",
      "\n",
      "    0  1  2  3  4  5  6\n",
      " 0  -  -  *  -  *  -  o\n",
      " 1  -  -  *  *  -  -  -\n",
      " 2  o  *  -  o  -  -  o\n",
      " 3  -  o  -  o  -  o  -\n",
      " 4  *  -  -  -  o  *  -\n",
      " 5  -  -  -  -  -  -  -\n",
      " 6  -  -  *  *  *  o  -\n",
      " BLACK 0   4\n",
      "\n",
      "    0  1  2  3  4  5  6\n",
      " 0  -  -  *  -  *  -  o\n",
      " 1  -  -  *  *  -  -  -\n",
      " 2  o  *  -  o  -  -  o\n",
      " 3  -  o  -  o  -  o  -\n",
      " 4  *  o  -  -  o  *  -\n",
      " 5  -  -  -  -  -  -  -\n",
      " 6  -  -  *  *  *  o  -\n",
      " WHITE 4   1\n",
      "\n",
      "    0  1  2  3  4  5  6\n",
      " 0  -  -  *  -  *  -  o\n",
      " 1  -  -  *  *  -  -  -\n",
      " 2  o  *  -  o  -  -  o\n",
      " 3  -  o  -  o  -  o  -\n",
      " 4  *  o  -  -  o  *  -\n",
      " 5  -  -  -  -  -  *  -\n",
      " 6  -  -  *  *  *  o  -\n",
      " BLACK 5   5\n",
      "\n",
      "    0  1  2  3  4  5  6\n",
      " 0  -  -  *  -  *  -  o\n",
      " 1  -  -  *  *  -  -  -\n",
      " 2  o  *  -  o  -  -  o\n",
      " 3  -  o  -  o  o  o  -\n",
      " 4  *  o  -  -  o  *  -\n",
      " 5  -  -  -  -  -  *  -\n",
      " 6  -  -  *  *  *  o  -\n",
      " WHITE 3   4\n",
      "\n",
      "    0  1  2  3  4  5  6\n",
      " 0  -  -  *  -  *  -  o\n",
      " 1  -  -  *  *  -  -  -\n",
      " 2  o  *  *  o  -  -  o\n",
      " 3  -  o  -  o  o  o  -\n",
      " 4  *  o  -  -  o  *  -\n",
      " 5  -  -  -  -  -  *  -\n",
      " 6  -  -  *  *  *  o  -\n",
      " BLACK 2   2\n",
      "\n",
      "    0  1  2  3  4  5  6\n",
      " 0  -  -  *  -  *  -  o\n",
      " 1  o  -  *  *  -  -  -\n",
      " 2  o  *  *  o  -  -  o\n",
      " 3  -  o  -  o  o  o  -\n",
      " 4  *  o  -  -  o  *  -\n",
      " 5  -  -  -  -  -  *  -\n",
      " 6  -  -  *  *  *  o  -\n",
      " WHITE 1   0\n",
      "\n",
      "    0  1  2  3  4  5  6\n",
      " 0  -  *  *  -  *  -  o\n",
      " 1  o  -  *  *  -  -  -\n",
      " 2  o  *  *  o  -  -  o\n",
      " 3  -  o  -  o  o  o  -\n",
      " 4  *  o  -  -  o  *  -\n",
      " 5  -  -  -  -  -  *  -\n",
      " 6  -  -  *  *  *  o  -\n",
      " BLACK 0   1\n",
      "\n",
      "    0  1  2  3  4  5  6\n",
      " 0  -  *  *  -  *  -  o\n",
      " 1  o  -  *  *  -  -  -\n",
      " 2  o  *  *  o  -  -  o\n",
      " 3  -  o  -  o  o  o  -\n",
      " 4  *  o  -  -  o  *  -\n",
      " 5  -  -  -  -  -  *  -\n",
      " 6  o  -  *  *  *  o  -\n",
      " WHITE 6   0\n",
      "\n",
      "    0  1  2  3  4  5  6\n",
      " 0  -  *  *  -  *  -  o\n",
      " 1  o  -  *  *  -  -  -\n",
      " 2  o  *  *  o  -  -  o\n",
      " 3  -  o  -  o  o  o  -\n",
      " 4  *  o  *  -  o  *  -\n",
      " 5  -  -  -  -  -  *  -\n",
      " 6  o  -  *  *  *  o  -\n",
      " BLACK 4   2\n",
      "\n",
      "    0  1  2  3  4  5  6\n",
      " 0  -  *  *  -  *  -  o\n",
      " 1  o  -  *  *  -  -  -\n",
      " 2  o  *  *  o  -  -  o\n",
      " 3  -  o  -  o  o  o  -\n",
      " 4  *  o  *  -  o  *  -\n",
      " 5  -  -  o  -  -  *  -\n",
      " 6  o  -  *  *  *  o  -\n",
      " WHITE 5   2\n",
      "\n"
     ]
    },
    {
     "ename": "KeyboardInterrupt",
     "evalue": "",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mKeyboardInterrupt\u001b[0m                         Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-11-fdb9591b80f6>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m      1\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mtrain_step\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0mtest\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[1;32m<ipython-input-5-ac2337d29d57>\u001b[0m in \u001b[0;36mtest\u001b[1;34m()\u001b[0m\n\u001b[0;32m     31\u001b[0m         \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     32\u001b[0m             \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\" WHITE %d   %d\\n\"\u001b[0m \u001b[1;33m%\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0maction\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0maction\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 33\u001b[1;33m         \u001b[0mtime\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msleep\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m2\u001b[0m\u001b[1;33m)\u001b[0m  \u001b[1;31m# 睡眠延时\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m     34\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     35\u001b[0m         \u001b[1;31m# 结束判断\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mKeyboardInterrupt\u001b[0m: "
     ]
    }
   ],
   "source": [
    "print(len(train_step))\n",
    "test()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<function matplotlib.pyplot.show(*args, **kw)>"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(train_step)\n",
    "plt.savefig(\"C:/Users/王欣哲/Desktop/codes/人工智能基础/问题4 监督学习/step.jpg\")\n",
    "plt.show"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
